使用 AWS re:Post 即表示您同意 AWS re:Post 使用條款

為什麼跨帳戶使用者在嘗試存取我使用 AWS KMS 客戶管理金鑰加密的 S3 物件時會收到拒絕存取錯誤?

2 分的閱讀內容
0

我的 Amazon Simple Storage Service (Amazon S3) 儲存貯體使用 AWS Key Management Service (KMS) 客戶管理金鑰加密。當來自其他 AWS 帳戶的使用者嘗試存取儲存貯體中的物件時,他們遇到「拒絕存取」錯誤。

簡短描述

若要將帳戶 A 中 AWS KMS 加密儲存貯體的存取權授予帳戶 B 中的使用者,請套用下列權限:

  • 帳戶 A 中的 Amazon S3 儲存貯體政策必須授予對帳戶 B 的存取權。
  • 帳戶 A 中的 AWS 受管金鑰必須與帳戶 A 中的 S3 儲存貯體位於相同的 AWS 區域。
  • 帳戶 A 中的 AWS KMS 金鑰政策必須向帳戶 B 中的使用者授予存取權。
  • 帳戶 B 中的 AWS Identity and Access Management (IAM) 政策必須向使用者授予對儲存貯體以及帳戶 A 中金鑰的存取權。

若要疑難排解**「拒絕存取」**錯誤,請確認這些權限設定正確。

重要: 對於客戶受管金鑰政策,您只能從建立該政策的 AWS 帳戶變更金鑰政策

您必須使用完全符合資格的 KMS 金鑰 ARN 來進行儲存貯體加密設定。如果您使用 KMS 金鑰別名,則 AWS KMS 僅在擁有儲存貯體 (帳戶 A) 的帳戶內解析金鑰。

以下是您用於儲存貯體加密的完全合格 AWS KMS 金鑰 ARN 的範例:

"arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"

以下是您不用於儲存貯體加密的 AWS KMS 金鑰別名的範例:

arn:aws:kms:us-west-2:111122223333:alias/alias-name

解決方法

帳戶 A 中的儲存貯體政策必須向帳戶 B 中的使用者授予存取權

在帳戶 A 中,檢閱儲存貯體政策以確認存在允許從帳戶 B 的帳戶 ID 存取的陳述式。

例如,下列儲存貯體政策允許 s3:GetObject 存取帳戶 ID 111122223333

{
  "Id": "ExamplePolicy1",
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "ExampleStmt1",
      "Action": [
        "s3:GetObject"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*",
      "Principal": {
        "AWS": [
          "111122223333"
        ]
      }
    }
  ]
}

帳戶 A 中的 AWS KMS 金鑰政策必須向帳戶 B 中的使用者授予存取權

AWS KMS 金鑰政策必須向帳戶 B 中的使用者授予執行 kms:Decrypt 動作的權限。例如,若要僅向一個 IAM 使用者或角色授予金鑰存取權,請使用類似下列的金鑰政策:

{
    "Sid": "Allow use of the key",
    "Effect": "Allow",
    "Principal": {
        "AWS": [
            "arn:aws:iam::111122223333:role/role_name"
        ]
    },
    "Action": [
        "kms:Decrypt"
    ],
    "Resource": "*"
}

在帳戶 A 中,使用 AWS 管理主控台政策檢視檢閱金鑰政策。在金鑰政策中,找到 "Sid": "Allow use of the key"。然後,確認帳戶 B 中的使用者在該陳述式中列為主體。

如果您沒有看到陳述式 "Sid": "Allow use of the key",則使用 AWS 管理主控台預設檢視來檢閱金鑰政策。然後,將帳戶 B 的帳戶 ID 新增為可存取金鑰的外部帳戶。

帳戶 B 中的 IAM 使用者政策必須向使用者授予對儲存貯體和帳戶 A 中金鑰的存取權

在帳戶 B 中,完成下列步驟:

  1. 開啟 IAM 主控台
  2. 開啟與帳戶 B 中使用者相關聯的 IAM 使用者或角色。
  3. 檢閱套用至 IAM 使用者或角色的權限政策清單。
  4. 確認有套用的政策可授予對儲存貯體和金鑰的存取權。
    **注意:**如果帳戶 B 中的 IAM 使用者或角色已經具有管理員存取權,則您不需要授予對金鑰的存取權。下列範例政策向帳戶 B 中的 IAM 使用者授予對物件和 KMS 金鑰 (用於解密儲存貯體中的物件) 的存取權:
    {
        "Version": "2012-10-17",
        "Statement": [{
                "Sid": "ExampleStmt1",
                "Action": [
                    "s3:GetObject"
                ],
                "Effect": "Allow",
                "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
            },
            {
                "Sid": "ExampleStmt2",
                "Action": [
                    "kms:Decrypt"
                ],
                "Effect": "Allow",
                "Resource": "arn:aws:kms:us-west-2:444455556666:key/1234abcd-12ab-34cd-56ef-1234567890ab"
            }
        ]
    }

如需如何新增或更正 IAM 使用者權限的詳細資訊,請參閱變更 IAM 使用者的權限

相關資訊

AWS 政策產生器

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