Python CDK创建授予kms:CreateKey权限的策略如何指定账户级KMS ARN?
实现方案
核心逻辑是通过CDK内置的栈动态属性自动获取当前部署环境的分区、区域、账号ID,拼接符合要求的KMS资源ARN,无需硬编码配置也无需使用全局通配符。
- 第一步:导入依赖的CDK模块
from aws_cdk import Stack, aws_iam as iam from constructs import Construct
- 第二步:拼接符合规范的KMS资源ARN
无需手动写死分区、区域、账号参数,调用Stack.of(self)的内置属性会在部署时自动填充对应环境的值:
kms_resource_arn = f"arn:{Stack.of(self).partition}:kms:{Stack.of(self).region}:{Stack.of(self).account}:*"
- 第三步:创建包含对应权限的IAM策略
示例为给指定IAM主体授予kms:CreateKey权限:
# 替换为你实际需要授权的主体,支持IAM用户、角色、服务主体等 target_principal = iam.Role.from_role_arn(self, "TargetRole", "arn:aws:iam::123456789012:role/你的目标角色ARN") # 定义权限语句 create_key_policy = iam.PolicyStatement( effect=iam.Effect.ALLOW, actions=["kms:CreateKey"], resources=[kms_resource_arn], principals=[target_principal] ) # 将权限附加到对应主体 target_principal.add_to_policy(create_key_policy)
如果你需要跨区域/跨账号授权,只需把拼接ARN时的region、account参数替换为指定的固定值即可,依旧不需要使用全局
*通配符。
内容的提问来源于stack exchange,提问作者Tarik Ayoub
相关产品推荐
相关产品推荐

