type
status
date
slug
summary
tags
category
icon
password
理論
AWSアカウント間でS3バケットへのアクセスを許可するには、以下のポイントを理解することが重要です。
- IAMポリシーとバケットポリシー:
- IAMポリシーは、ユーザーやグループに対して特定のアクションを許可または拒否しますが、S3バケットへのアクセスを制御するためには、S3バケットポリシーを設定する必要があります。
- S3バケットポリシーでは、どのアカウントやIAMユーザーがどのリソースにアクセスできるかを詳細に定義します。特にクロスアカウントアクセスの場合、
Principal
フィールドを使用して、他のAWSアカウントのユーザーにアクセス権を付与します。 - 状況によりますが、両方が適切に設定されている必要があるケースが多いです。クロスアカウントアクセスやパブリックアクセスのシナリオでは、S3バケットポリシーの設定が特に重要です。
- クロスアカウントアクセス:
- クロスアカウントアクセスとは、1つのAWSアカウントに保存されたリソースに、別のAWSアカウントのIAMユーザーがアクセスできるようにする設定です。このためには、適切なバケットポリシーで、指定したIAMユーザーに対してリソース(S3バケット)のアクセス権を付与します。
- 例として、
arn:aws:iam::AccountB:user/User_DataProcessor
のように、別アカウントのユーザーを指定してアクセスを許可します。
- S3バケットポリシーの基本構文: S3バケットポリシーはJSON形式で記述され、通常は次のような構成をとります:
- IAMユーザーの権限設定:
IAMユーザー(
User_DataProcessor
)には、S3バケットにアクセスできる権限(s3:GetObject
やs3:ListBucket
など)を付与する必要があります。
- バケットポリシーの検討点:
- Actionには、アクセスを許可したい操作(
s3:GetObject
やs3:ListBucket
)を指定します。 - Resourceには、アクセス対象となるS3リソース(バケット全体またはファイル単位)を指定します。
実践
AWSクロスアカウントS3アクセス設定のハンズオン
このハンズオンでは、2つの異なるAWSアカウント間でS3バケットへのアクセスを設定する方法を学びます。アカウントAのS3バケットに保存されたデータファイルに、アカウントBのIAMユーザーがアクセスできるようにします。
目的
- アカウントAのS3バケットに、アカウントBのIAMユーザーがアクセスできるように設定する。
- アカウントAでバケットポリシーを設定し、アカウントBのIAMユーザーにアクセス権限を付与する。
必要な準備
- 2つのAWSアカウント(アカウントAとアカウントB)
- アカウントAのS3バケット(例:
account-a-bucket
)
- アカウントBのIAMユーザー(例:
User_DataProcessor
)
ステップ1: アカウントAでS3バケットを作成
- AWS Management Consoleにログイン(アカウントAで)。
- S3サービスを選択し、バケットを作成します。
- バケット名:
account-a-bucket
(一意の名前を使用)。 - 他の設定はデフォルトのままでOK。

ステップ2: アカウントBのIAMユーザーを作成
- アカウントBにログインし、IAMコンソールに移動。
- ユーザーを追加を選択し、
User_DataProcessor
という名前で新しいIAMユーザーを作成します。 - アクセスの種類は「プログラムによるアクセス」と「AWS Management Consoleアクセス」を選択。
- ユーザーにS3アクセス権限を付与します。
- 「ポリシーを直接アタッチ」し、
AmazonS3ReadOnlyAccess
を選択。

ステップ3: アカウントAでS3バケットポリシーを設定
- アカウントAでS3バケットのポリシーを設定:
- S3バケットの「権限」タブを開き、「バケットポリシー」を選択。
- 次のポリシーを入力して、アカウントBの
User_DataProcessor
にアクセス権限を付与します。

- ポリシーを保存。
ステップ4: アカウントBからS3バケットにアクセス
- アカウントBの
User_DataProcessor
としてログインし、AWS CLIまたはS3コンソールを使用して、アカウントAのS3バケットにアクセスします。
- 例えば、AWS CLIで次のコマンドを実行してファイルを確認できます:
確認
- アカウントBのユーザーは、アカウントAのS3バケットのオブジェクトを取得し、バケット内のオブジェクトをリストできることを確認します。
解説
このハンズオンでは、クロスアカウントアクセスを実現するために、S3バケットポリシーを利用しています。アカウントAのS3バケットに対して、アカウントBのIAMユーザーに権限を付与することで、アカウントBからS3バケットにアクセス可能になります。このプロセスでは、以下の要素を確認しました:
- Principal: アカウントBのIAMユーザー(
User_DataProcessor
)に対してアクセス権限を与える。
- Action: アクセス可能なアクション(
s3:GetObject
とs3:ListBucket
)を指定。
- Resource: アクセス対象となるリソース(S3バケットとそのオブジェクト)。
一門道場
小売会社(Account A)が保存したデータファイルを、別の会社(ビジネスパートナー)に提供する必要があります。このファイルはAccount AのS3バケットに保存されており、ビジネスパートナーは自社のIAMユーザー(User_DataProcessor)に対して、Account AのS3バケット内のファイルへのアクセスを許可したいと考えています。この場合、必要な手順を選択する問題です。
- A:「S3バケットでクロスオリジンリソースシェアリング(CORS)を有効にする」
解説:
CORSは、異なるドメイン間でリソースを共有するための設定ですが、これは主にブラウザベースのリクエストに関係するもので、IAMユーザーによるアクセス権の管理には直接関係しません。そのため、これは不正解です。
- B:「Account AのS3バケットポリシーに次の内容を設定する」
解説:
これはAccount A側でのS3バケットポリシー設定に関するものですが、指定された形式(
arn:aws:s3:::AccountABucketName/*
)は不完全です。arn:aws:s3:::AccountABucketName
と指定することで、バケット自体に対するアクセス権を付与することはできますが、ファイルにアクセスするためには適切なポリシーが必要です。この選択肢は誤りです。- C:「Account AのS3バケットにアクセスするために、Account BのIAMユーザー(User_DataProcessor)に対してアクセス権限を付与する」
解説:
これは正しい選択肢です。Account AのS3バケットポリシーで、Account BのIAMユーザー(
User_DataProcessor
)に対してアクセス権限を付与することで、指定されたIAMユーザーがS3バケットにアクセスできるようになります。正しいポリシー例は次のようになります。これにより、
User_DataProcessor
は指定されたバケット内のファイルを読み取る権限を得ます。- D:「Account BのIAMユーザー(User_DataProcessor)の権限を設定する」
- 解説: IAMユーザーにアクセス権を付与することは、アクセス対象のリソース(この場合はAccount AのS3バケット)に対しても権限を設定する必要があります。しかし、この選択肢は他のAWSアカウントのリソースへのアクセスを設定するものではないため、不完全な解答です。
- 選択肢E:「Account BでUser_DataProcessorに対して、Principalを指定したポリシーを設定する」
- 解説:
Principal
を指定するのは、Account A側のS3バケットポリシーで行うべきであり、Account B側でPrincipal
を設定することは誤りです。この選択肢も不正解です。
正解
- 選択肢C: Account AのS3バケットに、Account BのIAMユーザー(
User_DataProcessor
)に対してアクセス権限を付与する。
- 選択肢B: Account A側でS3バケットポリシーを設定し、ファイルの読み取りとバケットのリスト表示が可能なアクセス権限を付与します。
解説
この問題では、異なるAWSアカウント間でS3バケットへのアクセス権を設定する方法を問われています。正しく設定するためには、Account AのS3バケットポリシーで、Account BのIAMユーザーに対して適切な権限(
s3:GetObject
やs3:ListBucket
)を付与する必要があります。- 作者:みなみ
- 链接:https://tangly1024.com/資格勉強/157d7ae8-88e2-800d-bd7d-e1452aea3347
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
相关文章