You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在CloudFormation中引用AWS自动生成的IAM角色关联自定义IAM策略

错误原因
  • CloudFormation 内置函数不支持通配符*做模糊匹配,你写的*会直接作为字面量加入角色名,而IAM角色名不允许使用*字符,直接触发校验报错。
  • !Select函数缺少必填的索引参数,你只传了拆分后的列表,没有指定要取列表的第几个元素,函数返回非法结构直接作为角色名提交,不符合IAM命名规则。
  • 手动拼接带通配符的ARN可靠性极低,AWS自动生成的资源名后缀会随部署参数变化,这种写法本身也无法正确匹配到目标角色。
正确解决方案

你用的AWS::SecretsManager::RotationSchedule资源如果配置了HostedRotationLambda属性,该资源的返回值直接提供了自动创建的轮转Lambda角色的ARN,你直接调用!GetAtt获取ARN后拆分出角色名即可,无需手动拼接:

rRotationLambdaDecryptPolicy:
  Type: AWS::IAM::ManagedPolicy
  DependsOn: rSecretRotationScheduleHostedRotationLambda
  Properties:
    Description: "Providing access to HostedLambda for decrypting KMS"
    ManagedPolicyName: CustomedHostedLambdaKmsUserRolePolicy
    PolicyDocument:
      Version: '2012-10-17'
      Statement:
      - Sid: AllowLambdaDecryptKMS
        Effect: Allow
        Action:
          - kms:Decrypt
          - kms:CreateGrant
        Resource:
        - !Sub arn:aws:kms:*:${AWS::AccountId}:key/*
        Condition:
          ForAnyValue:StringLike:
            kms:ResourceAliases: alias/SecretsManager_KMSKey
    Roles: 
      # 按/拆分角色ARN,索引1对应的就是角色名
      - !Select [1, !Split ["/", !GetAtt rSecretRotationScheduleHostedRotationLambda.HostedRotationLambdaRoleArn]]

如果该自动生成的IAM角色是你当前模板内直接定义的资源,更简单的方式是直接用!Ref引用角色的逻辑ID即可:

Roles:
  - !Ref <你的IAM角色资源的逻辑ID>

内容的提问来源于stack exchange,提问作者Zack_Coder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 16:36:03