KMS でキーポリシーの変更を誤り「キーにアクセスする権限がありません」になったときの対処方法

KMS でキーポリシーの変更を誤り「キーにアクセスする権限がありません」になったときの対処方法

Clock Icon2024.11.06

困っていた内容

AWS マネジメントコンソールから KMS のキーポリシーを変更したところ内容に誤りがありました。
再編集を試みたところ「KMS キーにアクセスする権限がありません」となり、変更できません。
他に許可している IAM ユーザー/ロールもなく、どうしたら良いでしょうか。

どう対応すればいいの?

AWS CLI からキーポリシーの変更をお試しください。

put-key-policy — AWS CLI 2.19.1 Command Reference

AWS マネジメントコンソールで、キーにアクセスする際には複数のアクセス許可が必要で、一部だけ不足している場合も「KMS キーにアクセスする権限がありません」と表示されます。

また、キーポリシーの変更には安全機能が備わっており、通常、少なくとも変更権限がなくなるような変更リクエストは拒否されます。

PutKeyPolicy - AWS Key Management Service

The key policy must allow the calling principal to make a subsequent PutKeyPolicy request on the KMS key. This reduces the risk that the KMS key becomes unmanageable.

そのため、多くの場合 AWS マネジメントコンソールからアクセス権限がないように見えるキーも、AWS CLI からはキーポリシーの復旧(変更)が可能です。

やってみた

get-key-policyコマンドで、現在のキーポリシーの取得を試みます。

kms:GetKeyPolicyが許可されていれば AWS マネジメントコンソールから表示できない場合も取得できます。
AccessDeniedExceptionでエラーになる場合は、次に進みます。

# コマンド例
$ aws kms get-key-policy \
  --key-id 【キー ID】 \
  --query Policy \
  --output text

# 実行例
$ aws kms get-key-policy \
  --key-id 1234abcd-12ab-34cd-56ef-1234567890ab \
  --query Policy \
  --output text
{
  "Version" : "2012-10-17",
  "Id" : "key-consolepolicy-3",
  "Statement" : [ {
    "Sid" : "Enable IAM User Permissions",
    "Effect" : "Allow",
    "Principal" : {
      "AWS" : "arn:aws:iam::123456789012:root"
    },
    "Action" : "kms:*",
    "Resource" : "*"
  } ]
}

取得した現在値をベースに、もしくは次のデフォルトキーポリシーを元に
新しい変更後のキーポリシーをテキストファイル(keypolicy.json)に作成します。

デフォルトキーポリシーのアカウント ID 123456789012は変更が必要です

デフォルトキーポリシー
{
    "Id": "key-consolepolicy-3",
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Enable IAM User Permissions",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::123456789012:root"
            },
            "Action": "kms:*",
            "Resource": "*"
        }
    ]
}

put-key-policyコマンドで作成したテキストファイルを指定しつつ、実行します。

# コマンド例
$ aws kms put-key-policy \
  --key-id 【キー ID】 \
  --policy file://default.json    

# 実行例
$ aws kms put-key-policy \
  --key-id 1234abcd-12ab-34cd-56ef-1234567890ab \
  --policy file://default.json    
$

コマンドが成功すれば、キーにアクセスできるようになることが期待されます。

※キーポリシーの構文エラーが発生する場合は次のトラブルシューティングをお試しください。
KMS キーポリシーエラー「無効なプリンシパル」の解決 | AWS re:Post

エラーが解消しない場合は次の情報を添えてサポートにお問い合わせください。

※エラーの場合も、エラー内容全文をお知らせください。

参考資料

AWS マネージドキー およびカスタマーマネージドKMSキーページでキーを表示するには、キーにタグやエイリアスがない場合でも、プリンシパルには kms:ListKeys、kms:ListAliases、および tag:GetResources アクセス許可が必要です。 残りのアクセス許可、特に kms:DescribeKey は、キーKMS詳細ページでオプションのKMSキーテーブル列とデータを表示するために必要です。iam:ListUsers および iam:ListRoles キーポリシーをエラーなしでデフォルトビューに表示するには、アクセス許可が必要です。

例えば、1 人のユーザーにキーへのアクセスのみを許可するKMSキーポリシーを作成するとします。その後、そのユーザーを削除すると、キーは管理不能になり、サポートに連絡して AWSKMSキーへのアクセスを取り戻す必要があります。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.