【发布时间】:2019-12-10 05:16:17
【问题描述】:
您好,我正在使用 Python 开发 AWS CDK。我正在创建政策文件。以前我为相同的策略编写了云形成模板,它运行良好。以下是云形成政策。
MWSECSServiceRole:
Type: AWS::IAM::Role
Properties:
AssumeRolePolicyDocument:
Statement:
- Effect: Allow
Principal:
Service: [ecs.amazonaws.com]
Action: ['sts:AssumeRole']
Path: /
Policies:
- PolicyName: "ecs-service-role"
PolicyDocument:
Statement:
- Effect: Allow
Action:
- elasticloadbalancing:DeregisterInstancesFromLoadBalancer
- elasticloadbalancing:DeregisterTargets
- elasticloadbalancing:RegisterInstancesWithLoadBalancer
- elasticloadbalancing:RegisterTargets
# yamllint disable-line rule:line-length
Resource:
# yamllint disable-line rule:line-length
- !Sub 'arn:aws:elasticloadbalancing:*:${AWS::AccountId}:loadbalancer/app/mws-*'
# yamllint disable-line rule:line-length
- !Sub 'arn:aws:elasticloadbalancing:*:${AWS::AccountId}:listener-rule/app/mws-*'
# yamllint disable-line rule:line-length
- !Sub 'arn:aws:elasticloadbalancing:*:${AWS::AccountId}:listener/app/mws-*'
# yamllint disable-line rule:line-length
- !Sub 'arn:aws:elasticloadbalancing:*:${AWS::AccountId}:targetgroup/mws-*'
- Effect: Allow
Action:
- ec2:Describe*
- ec2:AuthorizeSecurityGroupIngress
- elasticloadbalancing:Describe*
Resource: '*'
现在我正在编写 AWS CDK,如下所示。
MWSECSServiceRole = iam.Role(self, 'MWSECSServiceRole',
assumed_by=new ServicePrincipal('ecs.amazonaws.com'))
MWSECSServiceRole.add_to_policy(iam.PolicyStatement(
effect=iam.Effect.ALLOW,
resources=["arn:aws:elasticloadbalancing:*:${AWS::AccountId}:loadbalancer/app/mws-*","arn:aws:elasticloadbalancing:*:${AWS::AccountId}:listener-rule/app/mws-*","arn:aws:elasticloadbalancing:*:${AWS::AccountId}:listener/app/mws-*","arn:aws:elasticloadbalancing:*:${AWS::AccountId}:targetgroup/mws-*"],
actions=["elasticloadbalancing:DeregisterInstancesFromLoadBalancer","elasticloadbalancing:DeregisterTargets","elasticloadbalancing:RegisterInstancesWithLoadBalancer","elasticloadbalancing:RegisterTargets"]
))
MWSECSServiceRole.add_to_policy(iam.PolicyStatement(
effect=iam.Effect.ALLOW,
resources=["*"],
actions=["ec2:AuthorizeSecurityGroupIngress","ec2:Describe*","elasticloadbalancing:Describe*"]
))
这将生成资源,例如arn:aws:elasticloadbalancing:*:${AWS::AccountId}:loadbalancer/app/mws-*,但我需要的是- !Sub 'arn:aws:elasticloadbalancing:*:${AWS::AccountId}:loadbalancer/app/mws-*'。那么如何在 AWS CDK 中使用 !Sub 呢?有人可以帮我吗?
【问题讨论】:
-
不熟悉 CDK,但在文档中找到了。它有帮助吗? docs.aws.amazon.com/cdk/api/latest/python/aws_cdk.core/Aws.html 看起来您可以从那里提取帐户 ID。然后,您将用标准 python 字符串插值替换它在字符串中
标签: python amazon-web-services amazon-cloudformation aws-cdk