AWS CloudFormation を使用して AWS KMS キーを作成しようとすると表示される「The new key policy will not allow you to update the key policy in the future」エラーを解決する方法を教えてください。

最終更新日: 2020 年 8 月 20 日

AWS CloudFormation を使用して AWS KMS キーを作成し、AWS Key Management Service (AWS KMS) キーポリシーを定義すると、KMS キーの作成が失敗します。その後、「The new key policy will not allow you to update the key policy in the future」というエラーメッセージが表示されます。

簡単な説明

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

重要: 作成するキーポリシーが、現在のユーザーによる KMS キーの管理を許可することを確認してください。

解決方法

AWS CloudFormation スタックを作成すると、AWS CloudFormation テンプレートで指定されたリソースを作成するために CreateStack API コールを行うために使用された AWS Identity and Access Management (IAM) ユーザーまたはロールも使用されます。

1.    AWS CloudFormation を使用して KMS キーを作成するときは、その 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 アカウントのルートユーザーをプリンシパルキー管理者として設定します。

プリンシパルキー管理者を設定するには:

AWS CloudFormation スタックがフェデレーティッドユーザーアカウントによって作成された場合、プリンシパルを Amazon リソースネーム (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 ユーザー、ロール、またはサービスロールには、CreateKey および PutKeyPolicy API コールを行うための IAM アクセス許可が必要です。


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


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