Amazon S3 バケットポリシーでプリンシパル要素と明示的な拒否でワイルドカードを使用するにはどうすればよいですか?

最終更新日: 2021 年 8 月 16 日

Amazon Simple Storage Service (Amazon S3) バケットポリシーで、プリンシパル要素と明示的な拒否でワイルドカードを使用したいと思います。どうすればできますか?

簡単な説明

特定の AWS Identity and Access Management (IAM) エンティティが Amazon S3 バケットにアクセスできないようにするには、バケットポリシーで特定のアクセス許可を指定します。バケットポリシーでは、NotPrincipal 要素と明示的な拒否を使用する必要があります。詳細については、NotPrincipal と Deny の使用を参照してください。

ただし、NotPrincipal 要素ではワイルドカードはサポートされていないため、各ステートメントブロックのターゲットエンティティとして Principal を使用する必要があります。各ステートメントブロックには、各許可ブロックの条件を含める必要があります。

解決方法

NotPrincipal を使用する代わりに、各ステートメントブロックのターゲットエンティティとして Principal を使用します。これには、各許可ブロックの条件が含まれます。

始める前に、次のリソースが必要です。

この例では、aws: userid でワイルドカードを使用して、呼び出しプロセスによって渡されるすべての名前を含めます。例えば、一時的な認証情報を取得するために呼び出しが行われたときに、アプリケーション、サービス、またはインスタンス ID でワイルドカードが使用されます。詳細については、すべてのリクエストで使用可能な情報を参照してください。ロックアウトを防ぐために、AWS アカウントのルートユーザーが含まれています。

注意: 例の名前を自分のロール ID とバケット名に置き換えてください。

拒否ブロックの StringNotLike:

"Condition": {
        "StringNotLike": {
          "aws:userid": [
            "AROAID2GEXAMPLEROLEID:*",
            "444455556666"
          ]
        }
      }

詳細なポリシーは次のとおりです。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "AWS": [
          "arn:aws:iam::444455556666:role/s3-access-role"
        ]
      },
      "Action": [
        "s3:ListBucket"
      ],
      "Resource": "arn:aws:s3:::awsexamplebucket1"
    },
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "AWS": [
          "arn:aws:iam::444455556666:role/s3-access-role"
        ]
      },
      "Action": [
        "s3:DeleteObject",
        "s3:GetObject",
        "s3:PutObject"
      ],
      "Resource": "arn:aws:s3:::awsexamplebucket1/*"
    },
    {
      "Sid": "",
      "Effect": "Deny",
      "Principal": "*",
      "Action": [
        "s3:ListBucket",
        "s3:DeleteObject",
        "s3:GetObject",
        "s3:PutObject"
      ],
      "Resource": [
        "arn:aws:s3:::awsexamplebucket1/*",
        "arn:aws:s3:::awsexamplebucket1"
      ],
      "Condition": {
        "StringNotLike": {
          "aws:userid": [
            "AROAID2GEXAMPLEROLEID:*",
            "444455556666"
          ]
        }
      }
    }
  ]
}

この記事はお役に立ちましたか?


請求に関するサポートまたは技術サポートが必要ですか?