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 開発者ガイドの「Elastic Beanstalk を Amazon S3 に使用する」を参照してください。
Amazon EMR エンドポイントポリシーでは、Amazon EMR で使用される Amazon Linux リポジトリおよびその他のバケットへのアクセスを許可する必要があります。詳細については、Amazon EMR 管理ガイドの「プライベートサブネットの最小 Amazon S3 ポリシー」を参照してください。
AWS OpsWorks エンドポイントポリシーでは、少なくとも AWS OpsWorks で使用される特定のバケットへのアクセスを許可する必要があります。詳細については、AWS OpsWorks ユーザーガイドの「VPC でのスタックの実行」を参照してください。
AWS Systems Manager

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

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

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

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

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

Amazon S3 にアクセスするためのエンドポイントのポリシーの例は次のとおりです。詳細については、「VPC エンドポイントポリシーの使用」を参照してください。ビジネスニーズに合ったポリシー制限は、ユーザーが決定します。たとえば、リージョン ("packages.us-west-1.amazonaws.com") を指定して、あいまいな S3 バケット名を避けることができます。

重要

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

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

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

{ "Statement": [ { "Sid": "Access-to-specific-bucket-only", "Principal": "*", "Action": [ "s3:GetObject", "s3:PutObject" ], "Effect": "Allow", "Resource": ["arn:aws:s3:::my_secure_bucket", "arn:aws:s3:::my_secure_bucket/*"] } ] }

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

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

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

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

{ "Statement": [ { "Sid": "AmazonLinuxAMIRepositoryAccess", "Principal": "*", "Action": [ "s3:GetObject" ], "Effect": "Allow", "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", "Principal": "*", "Action": [ "s3:GetObject" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::amazonlinux.region.amazonaws.com/*" ] } ] }

Amazon S3 バケットポリシーの使用

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

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

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

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

代わりに、特定の VPC または特定の VPC エンドポイントへのアクセスを制限するようバケットポリシーを調整します。

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

以下は、特定の VPC エンドポイントまたは特定の VPC へのアクセスを制限するバケットポリシーの例です。IAM ユーザーがバケットポリシーを操作できるようにするには、s3:GetBucketPolicy および s3:PutBucketPolicy アクションを使用するアクセス許可を付与する必要があります。

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

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

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

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

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

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