【问题标题】:AWS Python CDK - Account specific resource on policy creationAWS Python CDK - 关于策略创建的账户特定资源
【发布时间】:2021-07-21 10:28:34
【问题描述】:

我正在尝试创建 AWS 策略以向委托人授予 kms:CreateKey 权限。我无法定义政策的资源部分。

通过阅读the docs,我发现我可以指定如下内容:

arn:AWS_partition_name:kms:AWS_region:AWS_account_ID:*

而不是常规的*

我的问题是,如何使用 Python CDK 实现这一点?

【问题讨论】:

  • 你能添加你用来创建资源的代码吗?写答案对我和未来的读者来说真的很有帮助。

标签: python amazon-web-services aws-cdk


【解决方案1】:

您可以像这样创建 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/*',
    ],
)

非常强烈建议在 interactive IAM Policy editor 中进行尝试,它可以让您清楚地了解您在创建策略时可以做的所有必需/可能的事情,包括高级 ARN 组合。

【讨论】:

    【解决方案2】:

    您可以通过在 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"])])})
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-09-24
      • 1970-01-01
      • 2020-09-17
      • 2020-12-16
      • 2021-01-05
      • 2021-10-05
      • 1970-01-01
      相关资源
      最近更新 更多