[英]AWS Python CDK - Account specific resource on policy creation
我正在尝试创建一个 AWS 策略来向委托人授予kms:CreateKey
权限。 我在定义策略的 Resource 部分时遇到问题。
通过阅读文档,我发现我可以指定如下内容:
arn:AWS_partition_name:kms:AWS_region:AWS_account_ID:*
而不是常规的*
。
我的问题是,如何使用 Python CDK 实现这一点?
您可以像这样创建 IAM 策略:
iam.PolicyStatement(
# effect is optional. It can be DENY or ALLOW, and it defaults to ALLOW
effect=iam.Effect.ALLOW,
# Specifies a list of actions this principal is allowed/denied to call.
actions=[
# Specify a specific action
'kms:CreateKey',
# Or, you can specify all actions of a specific service:
'kms:*',
],
# Resources this principal can act on.
resources=[
# All keys in your account, in your region
'arn:aws:kms:<YOUR REGION>:<YOUR ACCOUNT ID>:key/*',
# All aliases in your account, in your region
'arn:aws:kms:<YOUR REGION>:<YOUR ACCOUNT ID>:alias/*',
],
)
我强烈建议您使用交互式 IAM 策略编辑器,它提供了创建策略时您可以执行的所有必需/可能操作的奇妙视图,包括高级 ARN 组合。
您可以通过在 Python 中使用与 AWS CLI/AWS CDK 相关的预定义环境变量来实现。 在这种情况下,您可以通过以下方式进行操作:
arn = f"arn:AWS_partition_name:kms:{os.getenv('CDK_DEFAULT_REGION')}:{os.getenv('CDK_DEFAULT_ACCOUNT')}:*"
这是如何添加角色的完整图片:
role = _iam.Role(self, "lambda_emr_launcher_role",
role_name="_trackit-emr-launcher-role",
description="Service role for self-titled Lamdbda",
assumed_by=_iam.ServicePrincipal("lambda.amazonaws.com"),
managed_policies=[_iam.ManagedPolicy.from_aws_managed_policy_name("service-role/AWSLambdaBasicExecutionRole")],
inline_policies={
"Policy_KMS": _iam.PolicyDocument(statements=[
_iam.PolicyStatement(effect=_iam.Effect.ALLOW,
principals=["principal_example1"],
resources=[f"arn:AWS_partition_name:kms:{os.getenv('CDK_DEFAULT_REGION')}:{os.getenv('CDK_DEFAULT_ACCOUNT')}:*"],
actions=["kms:CreateKey"])])})
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.