IAM ポリシーが AWS KMS の KMS キーへのアクセスをユーザーまたはロールに許可しないようにするにはどうすればよいですか?

所要時間2分
0

AWS Identity and Access Management (IAM) アイデンティティによるアクセスから AWS Key Management Service (AWS KMS) KMS キーを保護したいと考えています。ただし、デフォルトの KMS ポリシーは、IAM 許可を使用して KMS キーにアクセスすることをアカウント内の IAM アイデンティティに許可します。

簡単な説明

デフォルトの KMS キーポリシーには、次のステートメントが含まれています。

{
    "Sid": "Enable IAM User Permissions",
    "Effect": "Allow",
    "Principal": {
        "AWS": "arn:aws:iam::111122223333:root"
    },
    "Action": "kms:*",
    "Resource": "*"
}

前の例では、EffectPrincipal 要素が AWS ルートユーザーアカウントを参照していません。Amazon リソースネーム (ARN) は、この IAM ポリシーを使用した KMS キーへのアクセスを許可します。必要なアクセス権限を IAM エンティティにアタッチすると、AWS アカウント 111122223333 のすべてのプリンシパルが KMS キーへのルートアクセス権を持ちます。

解決方法

IAM エンティティが KMS キーにアクセスできないようにし、ルートユーザーアカウントが KMS キーを管理できるようにすることが可能です。これは、ルートユーザーアカウントが KMS キーへのアクセス権の失うことも防止します。

デフォルトの KMS キーポリシーの Sid の「IAM ユーザー権限を有効にする」を Sid「EnableRootAccessAndPreventPermissionDelegation」に置き換えます。また、次のポリシーと同様の Condition 要素を追加してください。

重要: アカウント 111122223333 をお使いのアカウント番号に置き換え、条件キー aws:PrincipalTypeAccount に設定されていることを確認してください。

{
    "Sid": "EnableRootAccessAndPreventPermissionDelegation",
    "Effect": "Allow",
    "Principal": {
        "AWS": "arn:aws:iam::111122223333:root"
    },
    "Action": "kms:*",
    "Resource": "*",
    "Condition": {
        "StringEquals": {
            "aws:PrincipalType": "Account"
        }
    }
}

キー管理者の IAM ユーザーまたはロールを追加して、「キー管理者にアクセスを許可」 という Sid を付けてキーを管理できるようにすることができます。また、IAM ユーザーまたはロールが暗号化操作や他の AWS サービスでキーを使用できるようにすることもできます。「キーの使用を許可する」および「永続リソースのアタッチを許可する」という Sid のステートメントに、IAM ユーザーまたはロール ARN を追加します。

注: ルートユーザーアカウントを使用して、変更したポリシーでキーを作成する必要があります。または、「キー管理者にアクセスを許可」というステートメントで許可されているプリンシパルを使用してください。これにより、「MalformedPolicyDocumentException」ポリシーエラーが防止されます。

変更されたデフォルト KMS キーポリシーは次のようになります。

{
    "Id": "key-consolepolicy-1",
    "Version": "2012-10-17",
    "Statement":
    [
        {
            "Sid": "EnableRootAccessAndPreventPermissionDelegation",
            "Effect": "Allow",
            "Principal":
            {
                "AWS": "arn:aws:iam::111122223333:root"
            },
            "Action": "kms:*",
            "Resource": "*",
            "Condition":
            {
                "StringEquals":
                {
                    "aws:PrincipalType": "Account"
                }
            }
        },
        {
            "Sid": "Allow access for Key Administrators",
            "Effect": "Allow",
            "Principal":
            {
                "AWS":
                [
                    "arn:aws:iam::111122223333:user/KMSAdminUser",
                    "arn:aws:iam::111122223333:role/KMSAdminRole"
                ]
            },
            "Action":
            [
                "kms:Create*",
                "kms:Describe*",
                "kms:Enable*",
                "kms:List*",
                "kms:Put*",
                "kms:Update*",
                "kms:Revoke*",
                "kms:Disable*",
                "kms:Get*",
                "kms:Delete*",
                "kms:TagResource",
                "kms:UntagResource",
                "kms:ScheduleKeyDeletion",
                "kms:CancelKeyDeletion"
            ],
            "Resource": "*"
        },
        {
            "Sid": "Allow use of the key",
            "Effect": "Allow",
            "Principal":
            {
                "AWS":
                [
                    "arn:aws:iam::111122223333:user/ExampleUser",
                    "arn:aws:iam::111122223333:role/ExampleRole"
                ]
            },
            "Action":
            [
                "kms:Encrypt",
                "kms:Decrypt",
                "kms:ReEncrypt*",
                "kms:GenerateDataKey*",
                "kms:DescribeKey"
            ],
            "Resource": "*"
        },
        {
            "Sid": "Allow attachment of persistent resources",
            "Effect": "Allow",
            "Principal":
            {
                "AWS":
                [
                    "arn:aws:iam::111122223333:user/ExampleUser",
                    "arn:aws:iam::111122223333:role/ExampleRole"
                ]
            },
            "Action":
            [
                "kms:CreateGrant",
                "kms:ListGrants",
                "kms:RevokeGrant"
            ],
            "Resource": "*",
            "Condition":
            {
                "Bool":
                {
                    "kms:GrantIsForAWSResource": "true"
                }
            }
        }
    ]
}

キーポリシーでは、次の権限が許可されます。

  • AWS ルートユーザーアカウントはキーへのフルアクセス権を持ちます。
  • プリンシパルの KMSAdminUser と KMSAdminRole は、キーの管理操作を実行します。
  • キーを使用するプリンシパルの ExampleUser と ExampleRole。

関連情報

AWS アクセスキーを管理するためのベストプラクティス

AWS KMS キー

AWS公式
AWS公式更新しました 1年前
コメントはありません

関連するコンテンツ