はじめに
データを利活用するにあたりセキュリティという点は非常に重要になります。AWS上でセキュアなデータ管理を実現するために、sandbox環境の構成内容や検討内容についてご紹介します。
sandbox環境とは
まず、sandboxという言葉について簡単に紹介します。sandboxとは、ユーザーの通常環境から隔離された安全な仮想環境のことです。マルウェアなどのウイルス検証に使用されることが多いです。今回は安全にデータを活用するために、このsandbox環境を構築して利用することにしました。
環境構成
こちらがその構成図となります。Amazon S3やAmazon Aurora上にデータが格納されており、プライベートサブネット上に構築したAmazon EC2のみがアクセスできるような構成となっています。
また、Amazon EC2インスタンス構築にはAWS CloudFormationを使用しています。これにより容易に同じパラメータでの再作成が可能となります。データのアクセス制限については、次の項目で説明させていただきます。
アクセス制限
Amazon EC2、Amazon S3、Amazon Auroraへのアクセス権限については適切に管理する必要があります。
まずAmazon EC2についてですが、プライベートサブネット上のAmazon EC2は外部からアクセスできないようにしていますが、コードのデプロイなどを行うためにGitHubなど外部から取得する必要があります。そのため、パブリックサブネット上にあるNAT Gatewayを経由して、コードのデプロイなどを行います。また、Amazon EC2上に構築したWebサーバへのアクセスについては、リバースプロキシを用いてパブリックサブネット上にあるAmazon EC2を経由して行います。
続いて、Amazon S3とAmazon Auroraについてです。Amazon S3についてはバケットポリシーを設定して、特定のIAMロールおよびVPCエンドポイントのみアクセスできるようにします。そうすることでアクセス経路を絞ることができます。Amazon AuroraについてもVPCエンドポイントを使用して、接続できるようにします。
バケットポリシーの設定方法は以下のように設定することができます。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Access-to-USER-and-VPCE-Only",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::${ここにバケットの名前を入れる}",
"arn:aws:s3:::${ここにバケットの名前を入れる}"
],
"Condition": {
"StringNotEquals": {
"aws:PrincipalArn": "arn:aws:iam:::${IAMユーザのARN}",
"aws:SourceVpce": "${VPCエンドポイントID}"
}
]
}
監視と検知
障害発生時や不正なアクセスや挙動があった時の対応も必要になります。今回はAmazon CloudWatchとAWS Cloudtrailによる監視とAmazon GuardDutyによる検知を実施しました。 監視結果についてはAmazon S3にログとして保存され、障害対応や不正アクセス時の調査に役立ちます。
検知機能についてはAmazon GuardDutyが攻撃を検知した場合、Amazon EventBridgeとAmazon SNSを使用して管理者へメール通知が行われます。検知レベルは10段階で設定されており、通知の範囲も設定できますので、チームごとに適切なレベルを設定しておくことが可能となります。
さいごに
今回の構成はsandboxにおける最小構成であり、使用用途や必要なサービスに応じて柔軟に拡張していくことが可能です。様々なニーズに合わせてさらなる機能追加や最適化を行うことで、セキュアなデータ管理が実現され、データの利活用が促進されることが期待できます。