AWS CloudFormation を使用して AWS KMS キーを作成しようとすると表示される「新しいキーポリシーでは今後キーポリシーを更新できません」エラーを解決する方法を教えてください。

最終更新日 2022 年 11 月 1 日

AWS CloudFormation を使用して AWS KMS キーを作成し、AWS Key Management Service (AWS KMS) キーポリシーを定義すると、KMS キーの作成が失敗します。その後、「新しいキーポリシーでは今後キーポリシーを更新できません」というエラーメッセージが表示されます。

簡単な説明

キーポリシーが作成されると、AWS KMS は安全性チェックを実行します。セーフティチェックの 1 つが、キーポリシーのプリンシパルに CreateKey APIPutKeyPolicy API を実行するために必要な許可があることを確認します。このチェックにより、AWS KMS キーが管理不能になる可能性がなくなります。つまり、キーポリシーを変更したり、キーを削除したりできなくなります。

重要: 作成するキー ポリシーで、現在のユーザーが AWS KMS キーを管理できるようにしてください。

解決方法

AWS CloudFormation スタックを作成すると、AWS ID およびアクセス管理 (IAM) のユーザーまたはロールを使用して CreateStack API が呼び出しが行われます。このユーザーは、AWS CloudFormation テンプレートで指定されたリソースの作成にも使用されます。

1.    AWS CloudFormation を使用して AWS KMS キーを作成するときは、AWS KMS キーのキー管理者プリンシパルと同じ IAM ユーザーまたはロールを選択します。

次の例では、IAM ユーザー arn:aws:iam::123456789012:user/Alice によって AWS CloudFormation スタックが作成されます。プリンシパルはキー管理者として指定されます。キーポリシーを作成した後、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 リソースネーム (ARN) を使用します。

AWS CloudFormation スタックが SAML またはウェブフェデレーションユーザーアカウントによって作成された場合、プリンシパルを 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 ユーザー、ロール、またはサービスロールには、 CreateKeyPutKeyPolicy API 呼び出しを行うための IAM アクセス許可が必要です。


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


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