Direkt zum Inhalt

特定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"} } } }

gefragt vor 2 Jahren447 Aufrufe
1 Antwort
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
beantwortet vor einem Jahr

Du bist nicht angemeldet. Anmelden um eine Antwort zu veröffentlichen.

Eine gute Antwort beantwortet die Frage klar, gibt konstruktives Feedback und fördert die berufliche Weiterentwicklung des Fragenstellers.