特定IPと、API Gatewayからのアクセスを許可するS3バケットのポリシーの書き方を教えてください

0

以下を満たすS3バケットのアクセス許可のポリシーの書き方を教えてください。

  1. Pythonでupload_file() を使いアップロード: 特定のIPアドレスを持つPCからのみ許可
  2. API Gateway REST APIでPOST: 全て許可

以下のような書き方では、API Gatewayからのアクセスが不可能でした。

{ "Version": "2012-10-17", "Statement": { "Effect": "Deny", "Action": "", "Resource": "", "Condition": { "NotIpAddress": { "aws:SourceIp": [ "x.x.x.x/xx" ] }, "Bool": {"aws:ViaAWSService": "false"} } } }

asked a year ago411 views
1 Answer
0

お問い合わせ頂いたご質問については、以下2つの条件を満たす S3 バケットポリシーの書き方についてと認識しております。

  1. Python などの任意のツールを用い、特定のパブリック IP アドレスを持つネットワーク環境から行われる S3 API 実行を許可する
  2. 特定の API Gateway 経由から行われる S3 API 実行を許可する

上記認識の元頂いたご質問に回答いたします。

■ ご質問への回答

以下を満たすS3バケットのアクセス許可のポリシーの書き方を教えてください。

お客様のご質問にございましたバケットポリシーにおいて、一部ポリシーの記載を変更することで、ご要望を満たすことができるものかと存じます。

下記に詳細を記載いたします。

  1. ご要望の一つ目については、ご記載いただいたポリシー例の通りaws:SourceIp 条件キー [1] を用いて制御が可能です。

  2. ご要望の二つ目については、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

[4] AWS global condition context keys - aws:PrincipalArn

AWS
answered 3 months ago

You are not logged in. Log in to post an answer.

A good answer clearly answers the question and provides constructive feedback and encourages professional growth in the question asker.

Guidelines for Answering Questions