Amazon S3 Express One Zone へアクセスに必要な IAM ポリシーについて #AWSreInvent

圧倒的権限不足っ……!
2023.12.07

Amazon S3 Express One Zone ディレクトリバケットへアクセスに必要な IAM ポリシーを紹介します。かの有名なAmazonS3FullAccessの力を持ってしても S3 Express One Zone ディレクトリバケットへアクセスできません。これはどういうことなのでしょうか、みていきましょう。

Amazon S3 Express One Zone とは

re:Invent 2023 で発表された新しいストレージクラスです。S3 Standard と比べると耐久性を多少犠牲にして高パフォーマンスを実現したストレージクラスです。大量のデータを処理する AL/ML トレーニングや、ゲノム解析などのワークロードでは EC2 にマウントして使いたい場面があるのではないでしょうか。

S3 と S3 Express とでは名前空間が異なる

S3 と S3 Express は名前空間が別になっています。ここが大きなポイントです。

つまり、以下の IAM ポリシーですと S3 バケットにはフル権限でアクセスできても、S3 Express One Zone ディレクトリバケットにはアクセスできません。

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

S3 バケットと、S3 Express One Zone ディレクトリバケットの双方にフル権限でアクセスするには、以下の様にs3expressに対するアクションも必要になります。

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

比較しやすい様にあえてシンプルなポリシーの例示しています。一般的な利用用途でしたら S3/S3 Express のすべてに対してフル権限は強過ぎますので、Resourceで対象を絞るなり、アクションを細かく設定するなどセキュアな設定をご検討ください。

S3 フルアクセスの管理ポリシーはどうなっているのか

S3 に対してのフル権限でおなじみAmazonS3FullAccessは S3 Express One Zone もカバーしているのでしょうか?

S3 Express One Zone はカバーされていません。仮にAmazonS3FullAccessが付与されていても、S3 Express One Zone ディレクトリバケットにはアクセスできません。

参考: AmazonS3FullAccessのポリシー

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:*",
                "s3-object-lambda:*"
            ],
            "Resource": "*"
        }
    ]
}

S3 フルアクセスというくらいだから S3 なんとかにはすべてアクセスできるのだろうと勝手に思っていたのですが、そうではありませんでした。

アクション一覧

s3expressの現在用意されているアクション一覧は下記になります。

  • s3express:DeleteBucket
  • s3express:DeleteBucketPolicy
  • s3express:CreateBucket
  • s3express:PutBucketPolicy
  • s3express:GetBucketPolicy
  • s3express:ListAllMyDirectoryBucket
  • s3express:CreateSession

IAM ポリシー設定例

Mountpoint for Amazon S3 を使い EC2 にディレクトリバケットをマウントする際に必要だった IAM ポリシーを紹介します。詳細は以下のブログを参照ください。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowAccessRegionalEndpointAPIs",
            "Effect": "Allow",
            "Action": [
                "s3express:DeleteBucket",
                "s3express:DeleteBucketPolicy",
                "s3express:CreateBucket",
                "s3express:PutBucketPolicy",
                "s3express:GetBucketPolicy",
                "s3express:ListAllMyDirectoryBuckets"
            ],
            "Resource": "arn:aws:s3express:us-east-1:123456789012:bucket/mountpoint-for-s3--use1-az4--x-s3/*"
        },
        {
            "Sid": "AllowCreateSession",
            "Effect": "Allow",
            "Action": "s3express:CreateSession",
            "Resource": "*"
        }
    ]
}

おわりに

AmazonS3FullAccess使っているのにアクセスできないです。」とお問い合わせがありそうなので書き残しました。私は S3 Express の検証していて権限を調べていて気が付いたのですが、S3 の新機能かと思いきや、名前空間では別扱いなのでいつもの S3 の権限ではダメでした。

参考