如何在 Amazon S3 儲存貯體政策中對 Principal 元素和明確拒絕使用萬用字元?

1 分的閱讀內容
0

我想在 Amazon Simple Storage Service (Amazon S3) 儲存貯體政策中使用具有 Principal 元素和明確拒絕的萬用字元。

簡短描述

為防止 AWS Identity and Access Management (IAM) 實體存取您的 Amazon S3 儲存貯體,請在儲存貯體政策中指定特定權限。儲存貯體政策必須使用 NotPrincipal 元素和明確拒絕。如需詳細資訊,請參閱使用 Deny 指定 NotPrincipal

然而,由於 Amazon S3 不支援對 NotPrincipal 元素使用萬用字元,您必須使用 Principal 作為每個陳述式區塊中的目標實體。每個陳述式區塊也必須包含每個允許區塊的條件。

解決方法

首先,請確保您具備以下資源:

以下範例在 aws:userid 中使用萬用字元來包含呼叫程序傳遞的所有名稱。例如,當使用者執行呼叫以取得臨時憑證時,這會包括用於應用程式、服務或執行個體 ID 的萬用字元。如需詳細資訊,請參閱可用於政策變數的請求資訊。為防止鎖定,此範例包括 AWS 帳戶根使用者。

**注意:**請確保使用自己的角色 ID 和儲存貯體名稱取代範例名稱。

以下是完整的範例政策。請注意拒絕區塊中的 StringNotLike 條件:

{
  "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"
          ]
        }
      }
    }
  ]
}

相關資訊

如何限制 Amazon S3 儲存貯體存取特定 IAM 角色

AWS JSON 政策元素: NotPrincipal

AWS 官方
AWS 官方已更新 6 個月前