AWS CloudFormation
User Guide (API Version 2010-05-15)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。请点击 Amazon AWS 入门,可查看中国地区的具体差异

AWS::IAM::Role

创建 AWS Identity and Access Management (IAM) 角色。使用 IAM 角色启用 EC2 实例上运行的应用程序,以便安全访问您的 AWS 资源。

有关 IAM 角色的更多信息,请参阅 AWS Identity and Access Management User Guide 中的使用角色

语法

要在 AWS CloudFormation 模板中声明此实体,请使用以下语法:

JSON

Copy
{ "Type": "AWS::IAM::Role", "Properties": { "AssumeRolePolicyDocument": { JSON }, "ManagedPolicyArns": [ String, ... ], "Path": String, "Policies": [ Policies, ... ], "RoleName": String } }

YAML

Copy
Type: "AWS::IAM::Role" Properties: AssumeRolePolicyDocument: JSON object ManagedPolicyArns: - 字符串 Path: String Policies: - Policies RoleName: String

属性

AssumeRolePolicyDocument

与此角色关联的信任策略。一个角色只能与一个代入角色策略关联。有关代入角色策略的示例,请参阅模板示例。有关可以在 IAM 策略中使用的元素的更多信息,请参阅 IAM 用户指南 中的 IAM 策略元素参考

Required: Yes

Type: JSON 策略文档

注意

AWS Identity and Access Management (IAM) 要求策略为 JSON 格式。但对于 YAML 格式的模板,IAM 策略可为 JSON 或 YAML 格式。AWS CloudFormation 会始终将策略转换为 JSON 格式再提交给 IAM。

更新要求无需中断

ManagedPolicyArns

要附加到此角色的一个或多个托管策略 ARN。

Required: No

Type: List of String values

更新要求无需中断

Path

与角色相关的路径。有关 IAM 路径的信息,请参阅 IAM 用户指南 中的易记名称和路径

Required: No

Type: String

更新要求替换

Policies

要与此角色关联的策略。有关示例模板,请参阅模板示例

重要

角色、用户或组的每个策略的名称必须唯一。如果未指唯一名称,则对 IAM 角色的更新将失败。

注意

如果外部策略的角色(例如 AWS::IAM::PolicyAWS::IAM::ManagedPolicy)具有角色的 Ref,并且资源(例如 AWS::ECS::Service)具有同一角色的 Ref,请为该资源添加 DependsOn 属性,以便资源可以依赖该外部策略。此依赖关系确保该角色的策略在资源的整个生命周期内均可用。例如,当您删除一个具有 AWS::ECS::Service 资源的堆栈时,DependsOn 属性可确保在删除其角色的策略之前,AWS CloudFormation 会删除 AWS::ECS::Service 资源。

Required: No

类型IAM 策略 的列表

更新要求无需中断

RoleName

IAM 角色的名称。对于有效值,请参阅 IAM API 参考 中的 CreateRole 操作的 RoleName 参数。如果不指定名称,则 AWS CloudFormation 会生成一个唯一物理 ID 并将该 ID 用作组名称。

重要

如果指定一个名称,您将无法执行需要替换此资源的更新。您可以执行不需要或者只需要部分中断的更新。如果必须替换资源,请指定新名称。

如果指定了名称,则必须指定 CAPABILITY_NAMED_IAM 值以确认模板的功能。有关更多信息,请参阅 确认 AWS CloudFormation 模板中的 IAM 资源

警告

如果您在多个区域中重用同一模板,则为 IAM 资源命名会导致无法恢复的错误。为防止出现此情况,建议您使用 Fn::JoinAWS::Region 创建特定于区域的名称,如以下示例所示:{"Fn::Join": ["", [{"Ref": "AWS::Region"}, {"Ref": "MyResourceName"}]]}

必需:否

Type: String

更新要求替换

IAM 角色策略备注

有关 IAM 策略和策略文档的一般信息,请参阅 IAM 用户指南 中的如何编写策略

返回值

Ref

当该资源的逻辑 ID 提供给 Ref内部函数时,Ref 将返回资源名称。 示例:

Copy
{ "Ref": "RootRole" }

对于逻辑 ID 为“RootRole”的 IAM::Role,Ref 将返回资源名称。

有关使用 Ref 功能的更多信息,请参阅参考

Fn::GetAtt

Fn::GetAtt 返回一个此类型指定属性的值。以下为可用属性和示例返回值。

Arn

返回实例配置文件的 Amazon 资源名称 (ARN)。例如:

Copy
{"Fn::GetAtt" : ["MyRole", "Arn"] }

此操作会返回一个值,如 “arn:aws:iam::1234567890:role/MyRole-AJJHDSKSDF”

有关使用 Fn::GetAtt 的更多信息,请参见 Fn::GetAtt

模板示例

带内嵌策略和实例配置文件的 IAM 角色

此示例将显示 IAM::Role 中的内嵌策略。此策略被指定内联在 IAM::Role Policies 属性中。

JSON

Copy
{ "AWSTemplateFormatVersion": "2010-09-09", "Resources": { "RootRole": { "Type": "AWS::IAM::Role", "Properties": { "AssumeRolePolicyDocument": { "Version" : "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "ec2.amazonaws.com" ] }, "Action": [ "sts:AssumeRole" ] } ] }, "Path": "/", "Policies": [ { "PolicyName": "root", "PolicyDocument": { "Version" : "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "*", "Resource": "*" } ] } } ] } }, "RootInstanceProfile": { "Type": "AWS::IAM::InstanceProfile", "Properties": { "Path": "/", "Roles": [ { "Ref": "RootRole" } ] } } } }

YAML

Copy
AWSTemplateFormatVersion: "2010-09-09" Resources: RootRole: Type: "AWS::IAM::Role" Properties: AssumeRolePolicyDocument: Version: "2012-10-17" Statement: - Effect: "Allow" Principal: Service: - "ec2.amazonaws.com" Action: - "sts:AssumeRole" Path: "/" Policies: - PolicyName: "root" PolicyDocument: Version: "2012-10-17" Statement: - Effect: "Allow" Action: "*" Resource: "*" RootInstanceProfile: Type: "AWS::IAM::InstanceProfile" Properties: Path: "/" Roles: - Ref: "RootRole"

带外部策略和实例配置文件的 IAM 角色

在此示例中,Policy 和 InstanceProfile 资源被指定在 IAM 角色外部。此类资源是通过在其各自的角色属性中指定名称“RootRole”的角色。

JSON

Copy
{ "AWSTemplateFormatVersion": "2010-09-09", "Resources": { "RootRole": { "Type": "AWS::IAM::Role", "Properties": { "AssumeRolePolicyDocument": { "Version" : "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "ec2.amazonaws.com" ] }, "Action": [ "sts:AssumeRole" ] } ] }, "Path": "/" } }, "RolePolicies": { "Type": "AWS::IAM::Policy", "Properties": { "PolicyName": "root", "PolicyDocument": { "Version" : "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "*", "Resource": "*" } ] }, "Roles": [ { "Ref": "RootRole" } ] } }, "RootInstanceProfile": { "Type": "AWS::IAM::InstanceProfile", "Properties": { "Path": "/", "Roles": [ { "Ref": "RootRole" } ] } } } }

YAML

Copy
AWSTemplateFormatVersion: "2010-09-09" Resources: RootRole: Type: "AWS::IAM::Role" Properties: AssumeRolePolicyDocument: Version: "2012-10-17" Statement: - Effect: "Allow" Principal: Service: - "ec2.amazonaws.com" Action: - "sts:AssumeRole" Path: "/" RolePolicies: Type: "AWS::IAM::Policy" Properties: PolicyName: "root" PolicyDocument: Version: "2012-10-17" Statement: - Effect: "Allow" Action: "*" Resource: "*" Roles: - Ref: "RootRole" RootInstanceProfile: Type: "AWS::IAM::InstanceProfile" Properties: Path: "/" Roles: - Ref: "RootRole"

另请参阅