AWS CloudFormation を使用して CMK を作成しようとすると、「新しいキーポリシーでは今後キーポリシーを更新できません」というエラーが発生します。このエラーを解決するには、どうすれば良いですか?

最終更新日: 2019 年 1 月 14 日

カスタマーマスターキー (CMK) を作成し、AWS CloudFormation を使用して AWS Key Management Service (AWS KMS) キーポリシーを定義すると、CMK を作成できません。その後、次のエラーメッセージが表示されます。「新しいキーポリシーでは今後キーポリシーを更新できません」 どうすればこのエラーを解決できますか?

簡単な説明

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

作成するキーポリシーにより、現在のユーザーが CMK を管理できることを確認してください。

解決方法

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

1.    AWS CloudFormation を使用して CMK を作成する場合、CMK のキー管理者プリンシパルに使用されるものと同じ 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 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 アクセス許可が必要です。


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

改善できることはありますか?


さらにサポートが必要な場合