當我嘗試使用 AWS CloudFormation 建立 AWS KMS key 時,如何解決「新的金鑰政策將不允許您在未來更新金鑰政策」錯誤?

2 分的閱讀內容
0

當我使用 AWS CloudFormation 建立 AWS KMS key 並定義 AWS Key Management Service (AWS KMS) 金鑰政策時,AWS KMS key 建立會失敗。然後,我收到下列錯誤訊息: 「新的金鑰政策將不允許您在未來更新金鑰政策」。

簡短說明

AWS KMS 會在建立金鑰政策時執行安全檢查。一項安全檢查會確認金鑰政策中的主體具有製作 CreateKey APIPutKeyPolicy API 所需的許可。這項檢查消除了 AWS KMS key 變得無法管理的可能性,這意味著您無法變更金鑰政策或刪除金鑰。

**重要:**請確保您建立的金鑰政策允許目前使用者管理 AWS KMS key。

解決方法

當您建立 AWS CloudFormation 堆疊時,系統會使用 AWS Identity and Access Management (IAM) 使用者或角色進行 CreateStack API 呼叫。此使用者還用於建立 AWS CloudFormation 範本中指定的資源。

1.    使用 AWS CloudFormation 建立 AWS KMS key 時,請選擇與 AWS KMS key 的金鑰管理員主體相同的 IAM 使用者或角色。

在下列範例中,AWS CloudFormation 堆疊由 IAM 使用者 arn:aws:iam::123456789012:user/Alice 建立。主體指定為金鑰管理員。現在,允許 IAM 使用者「Alice」在建立金鑰政策之後修改金鑰政策。

"Type" : "AWS::KMS::Key",
  "Properties" : {
      "Description" : "A sample key",
      "KeyPolicy" : {
          "Version": "2012-10-17",
          "Id": "key-default-1",
          "Statement": [
              {
                  "Sid": "Allow administration of the key",
                  "Effect": "Allow",
                  "Principal": { "AWS": "arn:aws:iam::123456789012:user/Alice" },
                  "Action": [
                      "kms:Create*",
                      "kms:Describe*",
                      "kms:Enable*",
                      "kms:List*",
                      "kms:Put*",
                      "kms:Update*",
                      "kms:Revoke*",
                      "kms:Disable*",
                      "kms:Get*",
                      "kms:Delete*",
                      "kms:ScheduleKeyDeletion",
                      "kms:CancelKeyDeletion"
                  ],
                  "Resource": "*"
              },
              {
                  "Sid": "Allow use of the key",
                  "Effect": "Allow",
                  "Principal": { "AWS": "arn:aws:iam::123456789012:user/Bob" },
                  "Action": [
                      "kms:Encrypt",
                      "kms:Decrypt",
                      "kms:ReEncrypt*",
                      "kms:GenerateDataKey*",
                      "kms:DescribeKey"
                  ],
                  "Resource": "*"
              }
          ]
      }
    }
  }

2.    設定主體金鑰管理員,或將 AWS 帳戶根使用者設定為主體金鑰管理員。

若要設定主體金鑰管理員,請使用 Amazon Resource Name (ARN):

如果您的 AWS CloudFormation 堆疊由 SAML 或 Web 聯合身分使用者帳戶建立,請將主體設定為 ARN 的使用者擔任角色。例如:

"Principal": { "AWS": "arn:aws:sts::123456789012:assumed-role/FederatedAccess/FederatedUsername" }

**注意:**IAM 角色的名稱是 FederatedAccess,而聯合身分使用者的名稱是 FederatedUsername

如果使用 AWS CloudFormation 服務角色建立堆疊,請將主體設定為服務角色 ARN。例如:

"Principal": { "AWS": "arn:aws:iam::123456789012:role/ServiceRoleName” }

**注意:**AWS CloudFormation 服務角色的名稱是 ServiceRoleName

若要將 AWS 帳戶根使用者設定為主體金鑰管理員,請參閱下列範例:

"Principal": { "AWS": "arn:aws:iam::123456789012:root" }

**注意:**如果主體金鑰管理員設定為根 ARN,請確保您擁有正確的許可。建立 AWS CloudFormation 堆疊的 IAM 使用者、角色或服務角色必須具有 IAM 許可,才能進行 CreateKeyPutKeyPolicy API 呼叫。


相關資訊

AWS Key Management Service

AWS KMS 的身分驗證和存取控制

AWS 官方
AWS 官方已更新 1 年前