S3バケットのcurlアクセス(VPCE単位)を許可する

2019-08-14

前提条件

  • S3バケットに対してEC2のaws cliからはアクセスできるが、EC2からのcurlアクセスができないという場合(下記エラーメッセージのサンプル)の対処方法です。

An error occurred (AccessDenied) when calling the ListObjectsV2 operation: Access Denied
  • IAMポリシー/ロールが適切であっても、aws cliしか効果がありません。curlなど別のコマンドでのアクセスに備える場合は、本記事に記載のようにS3バケットポリシーで対応します。
  • EC2およびLambdaには、あらかじめ適切なIAMポリシー/ロールが割り当てられていることが前提です。IAMポリシーの書き方は、下記記事を参照ください。
  • 今回は、S3バケットのバケットポリシーで対応しています。

設定方法(VPC Endpointを許可する)

  • 以下、S3バケットのバケットポリシーに記載するサンプルです。”StringEquals”にS3に対するVPC Endpointのidを指定します。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Access-to-specific-VPCE-only",
            "Effect": "Allow",
            "Principal": "*",
            "Action": [
                "s3:List*",
                "s3:Get*"
            ],
            "Resource": "arn:aws:s3:::s3-bucket-name/*",
            "Condition": {
                "StringEquals": {
                    "aws:sourceVpce": "vpce-00aaaa1111bbbb222"
                }
            }
        }
    ]
}