AWS CloudFormation で IAM 管理ポリシーを IAM ロールに添付する方法を教えてください。
最終更新日: 2020 年 3 月 2 日
AWS CloudFormation で新規または既存の AWS Identity and Access Management (IAM) 管理ポリシーを新規または既存の IAM ロールに追加する方法を教えてください。
簡単な説明
既存または新規の IAM 管理ポリシーを新規の IAM ロールリソースに追加するには、ManagedPolicyArns プロパティ (リソースタイプが AWS::IAM::Role) を使用します。新規の IAM 管理ポリシーを既存の IAM ロールリソースに追加するには、ロールプロパティ (リソースタイプが AWS::IAM::ManagedPolicy) を使用します。
IAM 管理ポリシーは、AWS 管理ポリシーまたはカスタマー管理ポリシーのどちらでもかまいません。
重要: 最大 10 個の管理ポリシーを IAM ロールまたはユーザーに添付できます。各管理ポリシーのサイズは 6,144 文字を超えることはできません。 詳細については、IAM と STS の制限を参照してください。
シナリオに基づいて、次のいずれかのセクションの手順を実行してください。
- 既存の IAM 管理ポリシーを新規の IAM ロールに追加する
- 新しい IAM 管理ポリシーを新規の IAM ロールに追加する
- 新規の IAM 管理ポリシーを既存の IAM ロールに追加する
解決方法
既存の IAM 管理ポリシーを新規の IAM ロールに追加する
1. AWS CloudFormation テンプレートで、IAM 管理ポリシーの Amazon リソースネーム (ARN) を渡すために使用できる 1 つまたは複数のパラメータを作成します。以下の JSON と YAML の例をご参照ください。
JSON:
{
"AWSTemplateFormatVersion": "2010-09-09",
"Parameters": {
"awsExampleManagedPolicyParameterOne": {
"Type": "String",
"Description": "awsExampleIAMManagedPolicyARNOne"
},
"awsExampleManagedPolicyParameterTwo": {
"Type": "String",
"Description": "awsExampleIAMManagedPolicyARNTwo"
}
}
}
YAML:
Parameters:
awsExampleManagedPolicyParameterOne:
Type: String
Description: awsExampleIAMManagedPolicyARNOne
awsExampleManagedPolicyParameterTwo:
Type: String
Description: awsExampleIAMManagedPolicyARNTwo
2. テンプレートの Resources セクションで、リソースタイプが AWS::IAM::Role の場合、Ref をステップ 1 で作成した 1 つまたは複数のパラメータ (awsExampleManagedPolicyParameterOne と awsExampleManagedPolicyParameterTwo) に設定します。以下の JSON と YAML の例をご参照ください。
JSON:
{
"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"
}
]
}
}
}
}
YAML:
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
3. 既存の IAM 管理ポリシーを新規の IAM ロールに適用するには、スタックを作成するか、変更した AWS CloudFormation テンプレートに基づいて既存のスタックを更新します。
新しい IAM 管理ポリシーを新規の IAM ロールに追加する
1. AWS CloudFormation テンプレートで、AWS::IAM::ManagedPolicy リソースを使用して新しいポリシーを作成します。以下の JSON と YAML の例をご参照ください。
JSON:
{
"SampleManagedPolicy": {
"Type": "AWS::IAM::ManagedPolicy",
"Properties": {
"PolicyDocument": {
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowAllUsersToListAccounts",
"Effect": "Allow",
"Action": [
"iam:ListAccountAliases",
"iam:ListUsers",
"iam:GetAccountSummary"
],
"Resource": "*"
}
]
}
}
}
}
YAML:
SampleManagedPolicy:
Type: AWS::IAM::ManagedPolicy
Properties:
PolicyDocument:
Version: '2012-10-17'
Statement:
-
Sid: AllowAllUsersToListAccounts
Effect: Allow
Action:
- iam:ListAccountAliases
- iam:ListUsers
- iam:GetAccountSummary
Resource: "*"
2. !Ref 論理 ID 構文を使用して、IAM 管理ポリシーリソースを AWS::IAM::Role リソースに添付します。
たとえば、Ref をステップ 1 で作成したリソース論理 ID (SampleManagedPolicy) に設定します。以下の JSON と YAML の例をご参照ください。
JSON:
{
"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": "SampleManagedPolicy"
}
]
}
}
}
YAML:
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 SampleManagedPolicy
3. 新規の IAM 管理ポリシーを新規の IAM ロールに適用するには、スタックを作成するか、変更した AWS CloudFormation テンプレートに基づいて既存のスタックを更新します。
新規の IAM 管理ポリシーを既存の IAM ロールに追加する
1. AWS CloudFormation テンプレートで、既存のロール名を渡すために使用できるパラメータを作成します。以下の JSON と YAML の例をご参照ください。
JSON:
{
"Parameters": {
"awsExampleRolesParameter": {
"Type": "CommaDelimitedList",
"Description": "Names of existing Roles you want to add to the newly created Managed Policy"
}
}
}
YAML:
Parameters:
awsExampleRolesParameter:
Type: CommaDelimitedList
Description: Names of existing Roles you want to add to the newly created Managed Policy
2. テンプレートの Resources セクションで、リソースタイプが AWS::IAM::ManagedPolicy の場合、Ref をステップ 1 で作成したパラメータ (awsExampleRolesParameter) に設定します。以下の JSON と YAML の例をご参照ください。
JSON:
{
"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"
}
}
}
}
}
YAML:
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
3. 新規の IAM 管理ポリシーを既存の IAM ロールに適用するには、 スタックを作成するか、変更した AWS CloudFormation テンプレートに基づいて既存のスタックを更新します。