【问题标题】:Cloudformation access a resource that was already createdCloudformation 访问已创建的资源
【发布时间】:2020-09-30 19:25:09
【问题描述】:

有没有办法获取当前堆栈中未创建的角色的 profileInstance ?假设我在我的 cloudformation 中获得了角色的名称(作为参数传递),有没有办法获取它的 profileinstance ?

类似:

{"Fn::GetAtt" : ["MyRoleName", "ArnOfProfileInstance"] }

一个更普遍的问题,我们是否可以访问不是在当前堆栈中创建的资源,或者根本没有通过 cloudformation 创建的资源?

【问题讨论】:

    标签: amazon-web-services amazon-cloudformation


    【解决方案1】:

    是的,如果您知道角色名称,则个人资料具有已知格式。例如:

    # role
    arn:aws:iam::xxxxxx:role/my-role-name
    
    # profile 
    arn:aws:iam::xxxxxx:instance-profile/my-role-name
    

    因此,您可以从角色 arn 创建个人资料 arn。例如:

    ProflieArn:
      Fn::Sub:
        - "arn:${AWS::Partition}:iam::${AWS::AccountId}:instance-profile/${rolename}"
        - rolename: !Select [1, !Split ['/', !GetAtt MyInstanceRole.Arn] ]
    

    【讨论】:

    • 纠正我如果我错了,但配置文件实例不是自动创建的。这意味着当我创建一个新角色时,如果我想将该角色授予 ec2 节点,我还需要创建一个配置文件实例。在我的例子中,该角色是几周前作为 cloudformation 的一部分创建的,并由此创建了个人资料。但是我得到的配置文件 arn:arn:aws:iam::accoun-id:instance-profile/vpc-profile_name-some_random_strings
    • @JeyJ 如果有人确实在个人资料上添加了custom name,并且没有按照应有的方式重复使用角色名称,那么您当然无法从角色中获取个人资料的名称。 cfn 中并非没有自定义资源。
    • 配置文件的创建使用以下模板,因为您看不到 custom_name : "MyCusomProfile" : { "Type" : "AWS::IAM::InstanceProfile", "DeletionPolicy": "删除”,“属性”:{“路径”:“/”,“角色”:[{“Ref”:“MyRoleName”}]}},
    • @JeyJ 啊,我明白了。如果您控制此模板,则可以在其输出中导出配置文件的 ARN,然后在另一个模板中导入。如果没有a custom resource,如果角色名称不同,您将无法从角色 arn 对配置文件 arn 进行逆向工程。对不起。
    • 谢谢!我使用 profileInstanceName 来使用与角色相同的名称,并使用您建议的格式来传递 ProfileARN。
    猜你喜欢
    • 2017-06-12
    • 2020-01-22
    • 2020-11-09
    • 2020-01-09
    • 2019-07-26
    • 2018-02-20
    • 2017-06-08
    • 2021-04-06
    • 1970-01-01
    相关资源
    最近更新 更多