CloudFormation:如何将现有IAM托管策略附加到现有IAM角色
IAM托管策略与角色关联场景
已知场景1:向现有IAM角色添加新的IAM托管策略
Parameters: awsExampleRolesParameter: Type: CommaDelimitedList Description: 需要关联新托管策略的现有IAM角色名称列表 Resources: SampleManagedPolicy: Type: 'AWS::IAM::ManagedPolicy' Properties: PolicyDocument: Version: '2012-10-17' Statement: - Sid: AllowAllUsersToListAccounts Effect: Allow Action: - 'iam:ListAccountAliases' - 'iam:ListUsers' - 'iam:GetAccountSummary' Resource: '*' Roles: !Ref awsExampleRolesParameter
已知场景2:向新IAM角色添加现有IAM托管策略
Parameters: awsExampleManagedPolicyParameterOne: Type: String Description: 要添加到新角色的第一个IAM托管策略ARN awsExampleManagedPolicyParameterTwo: Type: String Description: 要添加到新角色的第二个IAM托管策略ARN Resources: RootRole: Type: 'AWS::IAM::Role' Properties: AssumeRolePolicyDocument: Version: '2012-10-17' Statement: - Effect: Allow Principal: Service: - ec2.amazonaws.com Action: - 'sts:AssumeRole' Path: / ManagedPolicyArns: - !Ref awsExampleManagedPolicyParameterOne - !Ref awsExampleManagedPolicyParameterTwo
问题场景:将现有IAM托管策略附加到现有IAM角色
问题代码框架
Parameters: awsExampleRolesParameter: Type: CommaDelimitedList Description: 需要附加托管策略的现有IAM角色名称列表 awsExampleManagedPolicyParameterOne: Type: String Description: 要附加的第一个IAM托管策略ARN awsExampleManagedPolicyParameterTwo: Type: String Description: 要附加的第二个IAM托管策略ARN # 此处需要编写资源配置,实现将指定托管策略附加到指定现有角色
解决方案代码
要实现该需求,需使用AWS::IAM::RolePolicyAttachment资源类型,它专门用于关联现有IAM角色和现有IAM托管策略。若参数包含多个角色,可通过CloudFormation的!ForEach循环批量生成关联资源:
Parameters: awsExampleRolesParameter: Type: CommaDelimitedList Description: 需要附加托管策略的现有IAM角色名称列表 awsExampleManagedPolicyParameterOne: Type: String Description: 要附加的第一个IAM托管策略ARN awsExampleManagedPolicyParameterTwo: Type: String Description: 要附加的第二个IAM托管策略ARN Resources: # 遍历所有目标角色 !ForEach RoleName in !Ref awsExampleRolesParameter: # 遍历所有要附加的托管策略 !ForEach PolicyArn in [!Ref awsExampleManagedPolicyParameterOne, !Ref awsExampleManagedPolicyParameterTwo]: # 生成唯一的资源名称:角色名+策略名(从ARN中提取) RolePolicyAttachment-${RoleName}-${!Select(-1, !Split('/', !Ref PolicyArn))}: Type: AWS::IAM::RolePolicyAttachment Properties: # 指定现有角色名称 RoleName: !Ref RoleName # 指定现有托管策略的ARN PolicyArn: !Ref PolicyArn
说明
AWS::IAM::RolePolicyAttachment无需创建新角色或策略,仅负责建立两者的关联关系!ForEach可批量处理多角色多策略的组合,避免重复编写资源配置- 资源名称通过角色名和策略名拼接,确保每个关联资源的唯一性
内容的提问来源于stack exchange,提问作者Santhosh
相关产品推荐
相关产品推荐

