yuj1osm's tech blog

クラウドやセキュリティなど

Amazon S3のアクセス制御

Amazon S3のアクセス制御について紹介します。

Amazon S3とは

S3はAWSが提供するオブジェクトストレージであり、様々なアクセス制御方法が用意されています。

docs.aws.amazon.com

アクセス制御方法

IAMポリシー

IAMユーザやグループに対して、どのバケットやフォルダに対してどのような操作が可能か定義する。

バケットポリシー

バケットに対して、どのAWSアカウントやIAMがどのような操作が可能か定義する。

ACL

バケットやオブジェクトに対して、どのAWSアカウントがどのような操作が可能か定義する。
現在AWSでは非推奨。

S3ブロックパブリックアクセス

バケットやオブジェクトへのパブリックアクセスをブロックする。
デフォルトで有効。

IAMポリシーとバケットポリシーを試す

事前準備1:IAMユーザ作成

バケットにアクセスするためのIAMユーザを作成します。
アクセス権限は未設定です。

事前準備2:バケット作成

バケットを作成して、ファイルを格納します。

ブロックパブリックアクセスはオンで、バケットポリシーは未設定です。

IAMユーザでバケットへアクセス

IAMポリシーもバケットポリシーも未設定なので、バケットへアクセスすることができません。

そこで、IAMポリシー「AmazonS3FullAccess」を付与してみます。

バケットとその配下のオブジェクトにアクセスすることができました。

バケットポリシーに以下を追加しても、オブジェクトにアクセスすることができます。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::<accountID>:user/testuser01"
            },
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::access-controle-test-bucket",
                "arn:aws:s3:::access-controle-test-bucket/*"
            ]
        }
    ]
}

IAMポリシーとバケットポリシーの注意点

前述のようなバケットポリシーで特定ユーザを明示的に許可しても、他のユーザからもアクセスできてしまいます。
そのため、明示的にDenyポリシーも併せて利用するべきです。

IAMポリシーには読み取り専用として使われる、「ReadOnlyAccess」ポリシーというものがあります。

便利なポリシーですが、バケットからオブジェクトをダウンロードすることができてしまいます。
例えば、機密情報をバケットに格納しても、「ReadOnlyAccess」ポリシーがあればデータを持ち出されるリスクがあります。
そのため、以下のようなDenyポリシーも併せて利用するべきです。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Deny",
            "Action": "s3:Get*",
            "Resource": "*"
        }
    ]
}

Denyポリシーでダウンロードが失敗した例です。

まとめ

今回は、IAMポリシーとバケットポリシーを紹介しました。
データ保管には便利なサービスですが、設定を誤ったために情報漏洩してしまうという事例が起きています。
設定が意図したとおりに動くか、しっかりとテストしておくことが重要です。
今一度、S3のセキュリティを見直してみるとよいかもしれません。