为何AWS CLI可创建无关联身份的IAM策略,CloudFormation却不行?
问题解析:AWS CLI与CloudFormation创建IAM策略的差异
核心原因:对应不同的IAM策略类型
- AWS CLI执行
aws iam create-policy创建的是IAM托管策略(Managed Policy):这类策略是独立的IAM资源,不需要直接关联用户、组或角色,创建后可按需附加到任意IAM实体上。 - CloudFormation中
AWS::IAM::Policy类型定义的是IAM内联策略(Inline Policy):内联策略是直接嵌入到用户、组或角色中的策略,必须和具体IAM实体绑定,因此CloudFormation强制要求指定Groups、Roles或Users属性,否则无法完成创建。
用CloudFormation创建独立托管策略的正确方式
如果要实现和CLI一致的效果(创建独立的托管策略),需要使用AWS::IAM::ManagedPolicy资源类型,示例模板如下:
Resources: OfficialSimpleManagedPolicy: Type: AWS::IAM::ManagedPolicy Properties: ManagedPolicyName: OfficialSimplePolicy PolicyDocument: Version: "2012-10-17" Statement: - Effect: Allow Resource: "*" Action: - cloudformation:Describe*
执行创建栈命令:
aws cloudformation create-stack --stack-name bucket-managed-policy --template-body file://BucketManagedPolicy.yaml --capabilities CAPABILITY_IAM
创建完成后,通过aws iam list-policies就能查看到这个独立的托管策略。
原错误的验证说明
你之前的模板用了AWS::IAM::Policy却未指定关联的IAM实体,触发了内联策略的强制约束,所以栈事件提示At least one of [Groups,Roles,Users] must be non-empty,且不会生成独立的托管策略。
内容的提问来源于stack exchange,提问作者Billy Billy
相关产品推荐
相关产品推荐

