ablog

不器用で落着きのない技術者のメモ

クロスアカウントでS3アクセスポイント経由でアクセス許可する

この記事は記載が間違っているので治す予定

S3 に Put する側のアカウント(234567890123)

  • Private Subnet に EC2 インスタンスを作成する
  • EC2 に IAM ロール(arn:aws:iam::234567890123:role/EC2Role)をアタッチする
  • S3 の VPC エンドポイント(Gateway型)を作成する
  • 別アカウントの S3 アクセスポイント経由でアップロードする
$ aws configure
AWS Access Key ID [None]:
AWS Secret Access Key [None]:
Default region name [None]: ap-northeast-1
Default output format [None]:
$ aws s3 cp test.txt s3://arn:aws:s3:ap-northeast-1:123456789012:accesspoint/az1-accesspoint/
upload: ./test.txt to s3://arn:aws:s3:ap-northeast-1:123456789012:accesspoint/az1-accesspoint/test.txt

S3バケットのあるアカウント(123456789012)

S3 バケットポリシー
  • S3アクセスポイントに委任する
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::234567890123:role/EC2Role"
            },
            "Action": "s3:*",
            "Resource": "arn:aws:s3:ap-northeast-1:123456789012:accesspoint/az1-accesspoint/object/*"
        }
    ]
}
S3 アクセスポイント
  • 名前: az1-accesspoint
  • バケット名: az1
  • ネットワークオリジン: VPC
  • VPC ID: vpc-07*************80 ★別アカウント(234567890123)の VPC ID を指定
  • アクセスポイントポリシー
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::234567890123:role/EC2AdminRole"
            },
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:ap-northeast-1:123456789012:accesspoint/az1-accesspoint/object/*" 
            ★ アクセスポイントの arn の後ろに "object/*" をつける必要がある、ないと "Policy has invalid resource" と怒られる 
        }
    ]
}