Amazon S3 におけるエンドポイント - Amazon Virtual Private Cloud

Amazon S3 におけるエンドポイント

既に VPC から Amazon S3 リソースへのアクセスを設定している場合、エンドポイントの設定後に、引き続き Amazon S3 DNS 名を使用してそれらのリソースにアクセスできます。ただし、以下のことに注意してください。

  • エンドポイントには、Amazon S3 リソースにアクセスするエンドポイントの使用を管理するポリシーがあります。デフォルトのポリシーでは、任意の AWS アカウント からの認証情報を使用して、VPC 内のユーザーまたはサービスによる、任意の Amazon S3 リソースへのアクセスが許可されます。これには、VPC が関連付けられているアカウントとは別の AWS アカウント の Amazon S3 リソースが含まれます。詳細については、「」を参照してくださいVPC エンドポイントでサービスへのアクセスを制御する

  • Amazon S3 によって受信される、影響を受けるサブネットのインスタンスからのソース IPv4 アドレスは、パブリック IPv4 アドレスから VPC のプライベート IPv4 アドレスに変更されます。エンドポイントはネットワークルートを切り替え、開いている TCP 接続を切断します。パブリック IPv4 アドレスを使用した以前の接続は再開されません。エンドポイントの作成または変更は、重要なタスクが実行中でないときに行うことをお勧めします。または、接続の障害後に、ソフトウェアが Amazon S3 に自動的に再接続できることをテストするようお勧めします。

  • IAM ポリシーまたはバケットポリシーを使用して VPC IPv4 CIDR 範囲 (プライベート IPv4 アドレス範囲) からのアクセスを許可することはできません。VPC CIDR ブロックは重複または同じになる場合があり、それによって予期しない結果が発生する可能性があります。したがって、VPC エンドポイントを介した Amazon S3 へのリクエストに、IAM ポリシーの aws:SourceIp 条件を使用することはできません。これはユーザーとロールの IAM ポリシー、およびバケットポリシーに適用されます。ステートメントに aws:SourceIp 条件が含まれる場合、値は指定した IP アドレスまたは IP アドレス範囲に一致しません。代わりに、以下を実行できます。

    • ルートテーブルを使用して、エンドポイントを通じて Amazon S3 内のリソースにアクセスできるインスタンスを制御します。

    • バケットポリシーの場合、特定のエンドポイントまたは特定の VPC へのアクセスを制限できます。詳細については、「」を参照してくださいAmazon S3 バケットポリシー

  • 現在、エンドポイントはクロスリージョンのリクエストをサポートしていません。必ずバケットと同じリージョンでエンドポイントを作成してください。Amazon S3 コンソールを使用するか、get-bucket-location コマンドを使用して、バケットの場所を見つけることができます。リージョン固有の Amazon S3 エンドポイントを使用してバケットにアクセスします (例: mybucket.s3.us-west-2.amazonaws.com)。Amazon S3 のリージョン固有のエンドポイントの詳細については、アマゾン ウェブ サービスの全般的なリファレンスの「Amazon Simple Storage Service (S3)」を参照してください。AWS CLI を使用して Amazon S3 にリクエストを実行する場合は、デフォルトリージョンをバケットと同じリージョンに設定するか、またはリクエストで --region パラメータを使用します。

    注記

    Amazon S3 向けの米国スタンダードリージョンは、us-east-1 リージョンにマッピングされているものとして扱います。

  • 現在、エンドポイントは IPv4 トラフィックでのみサポートされています。

Amazon S3 でエンドポイントを使用する前に、次の一般的な制限を読んだことも確認します: 「ゲートウェイエンドポイントの制限」。S3 バケットの作成と表示については、Amazon Simple Storage Service ユーザーガイドの「S3 バケットを作成する方法」および「S3 バケットのプロパティを表示する方法」を参照してください。

VPC の他の AWS のサービスを使用する場合は、特定のタスクに S3 バケットが使用される可能性があります。必ず、エンドポイントのポリシーで Amazon S3 へのフルアクセス (デフォルトのポリシー) を許可するか、またはそれらのサービスで使用される特定のバケットへのアクセスを許可します。または、これらのいずれのサービスによっても使用されないサブネットでのみエンドポイントを作成し、サービスが継続してパブリック IP アドレスを使用して S3 バケットにアクセスできるようにします。

次の表は、エンドポイントによって影響を受ける可能性のある AWS のサービスと、各サービスに固有の情報を示しています。

AWS のサービス 注意
Amazon AppStream 2.0 エンドポイントポリシーでは、ユーザーのコンテンツを保存するために AppStream 2.0 で使用される特定のバケットへのアクセスを許可する必要があります。詳細については、Amazon AppStream 2.0 管理ガイドの「ホームフォルダおよびアプリケーション設定の永続化に Amazon S3 VPC エンドポイントを使用する」を参照してください。
AWS CloudFormation 待機条件またはカスタムリソースリクエストに応答する必要があるリソースが VPC にある場合、エンドポイントポリシーで、少なくともこれらのリソースで使用される特定のバケットへのアクセスを許可する必要があります。詳細については、「AWS CloudFormation VPC エンドポイントの設定」を参照してください。
CodeDeploy エンドポイントポリシーでは、Amazon S3 へのフルアクセス、または CodeDeploy のデプロイ用に作成した S3 バケットへのアクセスを許可する必要があります。
Elastic Beanstalk エンドポイントポリシーでは、少なくとも Elastic Beanstalk アプリケーションに使用された S3 バケットへのアクセスを許可する必要があります。詳細については、AWS Elastic Beanstalk デベロッパーガイド Amazon S3 で Elastic Beanstalk を使用するを参照してください。
Amazon EMR エンドポイントポリシーでは、Amazon EMR で使用される Amazon Linux リポジトリおよびその他のバケットへのアクセスを許可する必要があります。詳細については、Amazon EMR 管理ガイドの「プライベートサブネットの最小 Amazon S3 ポリシー」を参照してください。
AWS OpsWorks エンドポイントポリシーでは、少なくとも で使用される特定のバケットへのアクセスを許可する必要がありますAWS OpsWorks 詳細については、AWS OpsWorks ユーザーガイド VPC でのスタックの実行を参照してください。
AWS Systems Manager

エンドポイントポリシーで、AWS リージョンのパッチベースラインオペレーションのために Patch Manager によって使用される Amazon S3 バケットへのアクセスを許可する必要があります。これらのバケットには、パッチベースラインサービスによって取得され、インスタンスで実行されるコードが含まれます。詳細については、AWS Systems Manager ユーザーガイド仮想プライベートクラウドエンドポイントの作成を参照してください。

オペレーションのために SSM Agentで必要な S3 バケットのアクセス許可のリストについては、AWS Systems Manager ユーザーガイド SSM Agentの最小 S3 バケットアクセス許可を参照してください。

Amazon Elastic Container Registry エンドポイントポリシーでは、Docker イメージレイヤーを保存するために Amazon ECR で使用される Amazon S3 バケットへのアクセスを許可する必要があります。詳細については、Amazon Elastic Container Registry ユーザーガイドAmazon ECR の最小 Amazon S3 バケットアクセス許可に関する記事を参照してください。
Amazon WorkDocs WorkSpaces または EC2 インスタンスで Amazon WorkDocs クライアントを使用している場合、エンドポイントポリシーでは、Amazon S3 へのフルアクセスを許可する必要があります。
WorkSpaces WorkSpaces は Amazon S3 に直接依存しません。ただし、WorkSpaces ユーザーにインターネットアクセスを提供する場合は、他の企業のウェブサイト、HTML メール、およびインターネットサービスが Amazon S3 に依存している可能性があることに注意してください。エンドポイントポリシーで Amazon S3 へのフルアクセスを許可し、これらのサービスが引き続き正しく動作できるようにします。

VPC と S3 バケット間のトラフィックは、Amazon ネットワークを離れません。

Amazon S3 のエンドポイントポリシー

Amazon S3 にアクセスするためのエンドポイントのポリシーの例は次のとおりです。詳細については、「」を参照してくださいVPC エンドポイントポリシーを使用する ビジネスニーズに合ったポリシー制限は、ユーザーが決定します。

重要

すべてのタイプのポリシー (IAM ユーザーポリシー、エンドポイントポリシー、S3 バケットポリシー、および Amazon S3 ACL ポリシー (存在する場合)) では、Amazon S3 が成功するために必要なアクセス許可を付与する必要があります。

AWS では、特定の呼び出し元に対してエンドポイントの使用を制限する場合は、VPC エンドポイントポリシーで IAM Principal 要素ではなく IAM 条件を使用することをお勧めします。このような条件の例としては aws:PrincipalArnaws:PrincipalAccountaws:PrincipalOrgIdaws:PrincipalOrgPaths があります。条件コンテキストキーの詳細については、AWS Identity and Access Management ユーザーガイドAWS グローバル条件コンテキストキーを参照してください。

例: 特定のバケットへのアクセスの制限

特定の S3 バケットへのアクセスを制限するポリシーを作成できます。これは、VPC で S3 バケットを使用する他の AWS サービスがある場合に便利です。指定されたバケットのみへのアクセスを制限するポリシーの例を次に示します。

{ "Sid": "AccessToSpecificBucket", "Effect": "Allow", "Principal": "*", "Action": [ "s3:ListBucket", "s3:GetObject", "s3:PutObject" ], "Resource": [ "arn:aws:s3:::example-bucket", "arn:aws:s3:::example-bucket/*" ] }

例: この VPC エンドポイントの使用をアカウントの特定の IAM ロールに制限する

VPC エンドポイントの使用を特定の IAM ロールに制限するポリシーを作成できます。指定されたアカウントの指定されたロールへのアクセスを制限する例を次に示します。

{ "Sid": "Restrict-acess-to-specific-IAM-role", "Effect": "Allow", "Principal": "*", "Action": "*", "Resource": "*", "Condition": { "ArnEquals": { "aws:PrincipalArn": "arn:aws:iam::111122223333:role/SomeRole" } } }

例: この VPC エンドポイントの使用を特定のアカウントのユーザーに制限する

VPC エンドポイントの使用を特定のアカウントに制限するポリシーを作成できます。指定されたアカウントのユーザーへのアクセスを制限する例を次に示します。

{ "Sid": "AllowCallersFromAccount111122223333", "Effect": "Allow", "Principal": "*", "Action": "*", "Resource": "*", "Condition": { "StringEquals": { "aws:PrincipalAccount": "111122223333" } } }

例: Amazon Linux AMI リポジトリへのアクセスの有効化

Amazon Linux AMI リポジトリは、各リージョン内の Amazon S3 バケットです。VPC 内のインスタンスが、エンドポイント経由でリポジトリにアクセスできるようにする場合、それらのバケットへのアクセスを有効にするエンドポイントポリシーを作成します。

次のポリシーでは、Amazon Linux リポジトリへのアクセスが許可されます。

region は、お使いの AWS リージョン (us-east-1 など) に置き換える必要があります。

{ "Statement": [ { "Sid": "AmazonLinuxAMIRepositoryAccess", "Effect": "Allow", "Principal": "*", "Action": [ "s3:GetObject" ], "Resource": [ "arn:aws:s3:::packages.region.amazonaws.com/*", "arn:aws:s3:::repo.region.amazonaws.com/*" ] } ] }

次のポリシーでは、Amazon Linux 2 のリポジトリへのアクセスが許可されます。

region は、お使いの AWS リージョン (us-east-1 など) に置き換える必要があります。

{ "Statement": [ { "Sid": "AmazonLinux2AMIRepositoryAccess", "Effect": "Allow", "Principal": "*", "Action": [ "s3:GetObject" ], "Resource": [ "arn:aws:s3:::amazonlinux.region.amazonaws.com/*" "arn:aws:s3:::amazonlinux-2-repos-region/*" ] } ] }

Amazon S3 バケットポリシー

バケットポリシーを使用して、特定のエンドポイント、VPC、IP アドレス範囲、または AWS アカウント からバケットへのアクセスを制御できます。

VPC エンドポイントを介した Amazon S3 へのリクエストに、バケットポリシーの aws:SourceIp 条件を使用することはできません。条件が、指定した IP アドレスまたは IP アドレス範囲のいずれにも一致しない場合、Amazon S3 バケットに対しリクエストを作成するときに望ましくない影響が生じる可能性があります。以下に例を示します。

  • Deny 効果と NotIpAddress 条件を持つバケットポリシーがある場合、そのポリシーは単一、または制限された IP アドレス範囲のみからのアクセスを許可するためのものです。エンドポイントを通じてバケットに送られるリクエストは、ポリシー内の他の制約が一致すると仮定して、NotIpAddress 条件が必ず一致し、ステートメントの効果が適用されます。バケットへのアクセスは拒否されます。

  • Deny 効果と IpAddress 条件を持つバケットポリシーがある場合、そのポリシーは単一、または制限された IP アドレス範囲のみへのアクセスを拒否するためのものです。エンドポイントを通じてバケットに送られるリクエストには、条件は一致せず、ステートメントは適用されません。IpAddress 条件がなくてもアクセスを許可するステートメントが他にあると仮定して、バケットへのアクセスが許可されます。

代わりに aws:VpcSourceIp を使用して、特定の IP アドレス範囲からのアクセスを制御できます。

IAM ユーザーがバケットポリシーを操作できるようにするには、s3:GetBucketPolicy および s3:PutBucketPolicy アクションを使用するアクセス許可を付与する必要があります。

Amazon S3 のバケットポリシーの詳細については、Amazon Simple Storage Service ユーザーガイドの「バケットポリシーとユーザーポリシーの使用」を参照してください。

例: 特定の エンドポイントへのアクセスの制限

aws:sourceVpce 条件を使用して、特定のエンドポイントへのアクセスを制限するバケットポリシーを作成できます。以下に、エンドポイント vpce-1a2b3c4d からバケット example_bucket にアクセスできるようにする S3 バケットポリシーの例を示します。指定されたエンドポイントが使用されていない場合、このポリシーはバケットに対するすべてのアクセスを拒否します。aws:sourceVpce 条件では VPC エンドポイントリソースに ARN を必要とせず、エンドポイント ID のみを必要とします。この例では、ユースケースに必要なアクセスを許可するポリシーステートメントがあることを前提としています。

{ "Version": "2012-10-17", "Id": "Access-to-bucket-using-specific-endpoint", "Statement": [ { "Sid": "Access-to-specific-VPCE-only", "Effect": "Deny", "Principal": "*", "Action": "s3:*", "Resource": ["arn:aws:s3:::example_bucket", "arn:aws:s3:::example_bucket/*"], "Condition": { "StringNotEquals": { "aws:sourceVpce": "vpce-1a2b3c4d" } } } ] }

例: 特定の VPC へのアクセスの制限

aws:sourceVpc 条件を使用して、特定の VPC へのアクセスを制限するバケットポリシーを作成できます。これは、同じ VPC で複数のエンドポイントを設定済みで、すべてのエンドポイントについて S3 バケットへのアクセスを管理する場合に便利です。以下に、vpc-111bbb22 およびそのオブジェクトへのアクセスを VPC example_bucket に許可するポリシーの例を示します。指定された VPC が使用されていない場合、このポリシーはバケットに対するすべてのアクセスを拒否します。aws:sourceVpc 条件では、VPC リソースへの ARN は必要なく、VPC ID のみが必要です。この例では、ユースケースに必要なアクセスを許可するポリシーステートメントがあることを前提としています。

{ "Version": "2012-10-17", "Id": "Access-to-bucket-using-specific-VPC", "Statement": [ { "Sid": "Access-to-specific-VPC-only", "Effect": "Deny", "Principal": "*", "Action": "s3:*", "Resource": ["arn:aws:s3:::example_bucket", "arn:aws:s3:::example_bucket/*"], "Condition": { "StringNotEquals": { "aws:sourceVpc": "vpc-111bbb22" } } } ] }

例: 特定の IP アドレス範囲へのアクセスの制限

aws:VpcSourceIp 条件を使用して、特定の IP アドレス範囲へのアクセスを制限するポリシーを作成できます。以下に、example_bucket およびそのオブジェクトへのアクセスを 172.31.0.0/16 に許可するポリシーの例を示します。このポリシーでは、他の IP アドレス範囲からのバケットへのアクセスを拒否します。この例では、ユースケースに必要なアクセスを許可するポリシーステートメントがあることを前提としています。

{ "Version": "2012-10-17", "Id": "Policy1415115909152", "Statement": [ { "Sid": "Access-to-specific-VPC-CIDR-only", "Effect": "Deny", "Principal": "*", "Action": "s3:*", "Resource": ["arn:aws:s3:::example_bucket", "arn:aws:s3:::example_bucket/*"], "Condition": { "NotIpAddress": { "aws:VpcSourceIp": "172.31.0.0/16" } } } ] }

例: 特定の AWS アカウント のバケットへのアクセスの制限

s3:ResourceAccount 条件を使用して、特定の AWS アカウント の S3 バケットへのアクセスを制限するポリシーを作成できます。これは、VPC 内のクライアントが、お客様が所有していないバケットにアクセスすることを制限したい場合に役立ちます。111122223333 のアカウント ID で、単一の AWS アカウント が所有するリソースへのアクセスを制限するポリシーの例は次のとおりです。この例では、ユースケースに必要なアクセスを許可するポリシーステートメントがあることを前提としています。

{ "Version": "2012-10-17", "Id": "Policy1415115909152", "Statement": [ { "Sid": "Access-to-bucket-in-specific-account-only", "Effect": "Deny", "Principal": "*", "Action": [ "s3:GetObject", "s3:PutObject" ], "Resource": "arn:aws:s3:::*", "Condition": { "StringNotEquals": { "s3:ResourceAccount": "111122223333" } } } ] }