- 新しい順
- 投票が多い順
- コメントが多い順
お問い合わせ頂いたご質問については、以下2つの条件を満たす S3 バケットポリシーの書き方についてと認識しております。
- Python などの任意のツールを用い、特定のパブリック IP アドレスを持つネットワーク環境から行われる S3 API 実行を許可する
- 特定の API Gateway 経由から行われる S3 API 実行を許可する
上記認識の元頂いたご質問に回答いたします。
■ ご質問への回答
以下を満たすS3バケットのアクセス許可のポリシーの書き方を教えてください。
お客様のご質問にございましたバケットポリシーにおいて、一部ポリシーの記載を変更することで、ご要望を満たすことができるものかと存じます。
下記に詳細を記載いたします。
-
ご要望の一つ目については、ご記載いただいたポリシー例の通りaws:SourceIp 条件キー [1] を用いて制御が可能です。
-
ご要望の二つ目については、aws:ViaAWSService 条件キーを用いた制御はできません。
これは、一般的に API Gateway が他 AWS サービスにアクセスする場合、サービスにリンクされたIAMロールを経由してのアクセスとなるためです。[2]
この場合、参考資料 [3] 引用部分にある通り、aws:ViaAWSService 条件キーは false を返すため、今回のお客様のユースケースにはご使用いただけないものとなるかと存じます。
代わりに、API Gateway が使用するサービスにリンクされた IAM ロールの ARN および aws:PrincipalArn 条件キー[4]を用い、制御する事が可能です。
上記を踏まえ、ご要望を満たすと考えられるポリシー例は下記です。
ポリシー内 "arn:aws:iam::<AWS_ACCOUNT_ID>:role/<ROLE_NAME>" が API Gateway が使用するサービスにリンクされた IAM ロールの ARN となります。
なおあくまで一例のポリシーとなりますため、各所ドキュメントをご確認/ご検証の上、お客様のセキュリティ要件に応じ調整いただき、お客様のご責任にてご利用いただくことをお願い申し上げます。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Principal": "*", "Action": "s3:*", "Resource": [ "arn:aws:s3:::BUCKET-NAME/*", "arn:aws:s3:::BUCKET-NAME" ], "Condition": { "NotIpAddress": { "aws:SourceIp": "x.x.x.x/xx" }, "ArnNotEquals": { "aws:PrincipalArn": "arn:aws:iam::<AWS_ACCOUNT_ID>:role/<ROLE_NAME>" } } } ] }
以上となります。
■ 参考資料
[1] AWS global condition context keys - aws:SourceIp
[2] API Gateway でのサービスリンクロールの使用
[3] AWS global condition context keys - aws:ViaAWSService
- https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-viaawsservice
===引用ここから===
The context key returns false if the service uses a service role or service-linked role to make a call on the principal's behalf.
===引用ここまで===
[4] AWS global condition context keys - aws:PrincipalArn
関連するコンテンツ
- AWS公式更新しました 2年前
- AWS公式更新しました 2年前