[S3 Access Points]S3バケットのアクセスポイントを作成しセキュリティレベルを分ける #reinvent

2019.12.06

コンニチハ、千葉です。

S3 Access Pointsを利用すると、S3バケットに対しアクセスポイントを作成し、IAMポリシーを書くことができます。 丁度VPCエンドポイントのポリシーのように、アクセスポイント経由で記載したIAMポリシーが評価され適用されます。

例えば、以下のユースケースを考えます。

  • セキュリティレベル1のアクセスポイント: /level1/*への読込みアクセスはインターネット経由でのアクセス
  • セキュリティレベル2のアクセスポイント: /level2/*への読書きアクセスはVPCかつ特定のIPアドレスから許可

このように、キーに対してアクセスレベルを分けることができます。セキュリティレベル1とセキュリティレベル2を使い分け、S3上のデータにセキュアにアクセスします。セキュリティレベルを分けることでさまざまなリスクに柔軟に対応できます。

やってみる

設定

今回は、以下のような検証をしてみます。

  • アクセスポイント1:書き込みを許可
  • アクセスポイント2:読み込みを許可

のようなケースで設定を行ってみます。

アクセスポイント1、writeを作成します。

設定はインターネット経由で、パブリックアクセスをブロックするように設定しました。

Access point policyはこのように指定し、書き込みを許可します。

{
    "Version": "2008-10-17",
    "Statement": [
        {
            "Effect": "Deny",
            "Principal": {
                "AWS": "arn:aws:iam::123456789012:user/cm-chiba.jun"
            },
            "NotAction": "s3:PutObject",
            "Resource": "arn:aws:s3:us-east-2:123456789012:accesspoint/write/object/*"
        }
    ]
}

同じように読み込みをアクセスポイント2、readを作成します。

ポリシーは、読み込みを許可しました。

{
    "Version": "2008-10-17",
    "Statement": [
        {
            "Effect": "Deny",
            "Principal": {
                "AWS": "arn:aws:iam::123456789012:user/cm-chiba.jun"
            },
            "NotAction": "s3:GetObject",
            "Resource": "arn:aws:s3:us-east-2:123456789012:accesspoint/read/object/*"
        }
    ]
}

これで設定して完了です。

IAM cm-chiba.junにはAdministrator権限を付与しています。

検証

writeアクセスポイントで、ファイルをアップロードして、読み込みをしてみます。注意ポイントとして、バケットの指定方法が異なり、アクセスポイントのARNを指定する必要があります。今回はマネージメントコンソールからアクセスポイント経由でS3を操作してみます。writeアクセスポイントを選択し、「Use this access point」をクリックします。

これで、アクセスポイント経由になります。ファイルをアップロードしてみます。

PutObjectの権限があるので問題なくアップロードできました。ダウンロードしてみます。

GetObject権限がないので、エラーになりました。次に、readアクセスポイントの動作確認です。readアクセスポイントからアクセスし、ファイルをダウンロードしてみます。

ダウンロードできました。次にアップロードしてみます。

エラーになりました。

ちなみにCLIでアクセスポイント経由する場合、以下のようにアクセスします。

aws s3 put-object example.txt --bucket arn:aws:s3:us-east-2:123456789012:accesspoint/write

バケットにアクセスポイントのARNを指定します。

最後に

S3の新しいアクセス方法を試してみました。1つのバケットで要件が違うアクセスがある場合、アクセスポイントごとにポリシーを適用できます。データレイクなど、1つのバケットに対し様々なアクセスが必要なケースで、セキュリティレベルを柔軟に設定できそうです。

参考