KMSキーポリシーの権限の見直し

KMSキーの利用・管理権限を必要な範囲に限定し、ポリシーを引き続き管理する手段を維持してください。

説明

KMSキーの不要な利用・管理権限は、そのキーに依存するデータやサービスに影響する可能性があります。実際のキーポリシー、IAM権限、KMSグラントを併せて確認してください。キーポリシーのResource: "*"は関連付けたキーを指し、既定の所有アカウントへの委任やポリシーの省略だけで公開アクセスになるわけではありません。

想定される影響

不要な署名・復号や管理操作が実際に許可されると、データの信頼性やサービスの可用性に影響する可能性があります。可能な操作はキーの用途と実際の権限によって決まります。

対処方法

  • キーの利用者と管理者を分け、必要な操作と有効な条件で権限を限定してください。
  • 今後のkms:PutKeyPolicyに必要な管理経路を維持し、ロックアウト防止チェックを回避しないでください。必要な利用・管理操作が維持され、不要な要求が拒否されることを確認してください。

例

署名・検証用RSAキーの例であり、復号用のキーではありません。SigningRoleArnに実際の署名用ロールARNを指定してください。変更後の所有アカウントのステートメントはIAM経由の委任を維持するため、デプロイ・管理主体には適切なIAM権限も必要です。

変更前

yaml
Resources:
  RSASigningKey:
    Type: AWS::KMS::Key
    Properties:
      Description: RSA-3072 asymmetric CMK for signing and verification
      KeySpec: RSA_3072
      KeyUsage: SIGN_VERIFY
      KeyPolicy:
        Version: "2012-10-17"
        Id: key-default-1
        Statement:
          - Sid: Enable IAM User Permissions
            Effect: Allow
            Principal:
              AWS: "*"
            Action: kms:*
            Resource: "*"

主体とKMS操作を広く許可します。有効な制御と実際に必要な権限を併せて確認してください。

変更後

yaml
Parameters:
  SigningRoleArn:
    Type: String
Resources:
  RSASigningKey:
    Type: AWS::KMS::Key
    Properties:
      Description: RSA-3072 asymmetric CMK for signing and verification
      KeySpec: RSA_3072
      KeyUsage: SIGN_VERIFY
      KeyPolicy:
        Version: "2012-10-17"
        Id: key-default-1
        Statement:
          - Sid: EnableIAMUserPermissions
            Effect: Allow
            Principal:
              AWS: !Sub 'arn:${AWS::Partition}:iam::${AWS::AccountId}:root'
            Action: kms:*
            Resource: "*"
          - Sid: Allow use of the key
            Effect: Allow
            Principal:
              AWS: !Ref SigningRoleArn
            Action:
              - kms:Sign
              - kms:Verify
              - kms:DescribeKey
            Resource: "*"

所有アカウントへの委任を残し、指定ロールに署名・検証・キー情報の参照を許可します。ほかのポリシーやグラントも含めて実際のアクセスを確認してください。

参考資料