AWS CloudFormation에서 IAM 역할에 IAM 관리형 정책을 연결하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2020년 3월 2일

AWS CloudFormation에서 기존 또는 새로운 IAM 역할에 기존 또는 새로운 AWS Identity and Access Management(IAM) 관리형 정책을 추가하려고 합니다.

간략한 설명

새로운 IAM 역할 리소스에 기존 또는 새로운 IAM 관리형 정책을 추가하려면 리소스 유형 AWS::IAM::RoleManagedPolicyArns 속성을 사용합니다. 기존 IAM 역할 리소스에 새로운 IAM 관리형 정책을 추가하려면 리소스 유형 AWS::IAM::ManagedPolicyRoles 속성을 사용합니다.

IAM 관리형 정책은 AWS 관리형 정책 또는 고객 관리형 정책일 수 있습니다.

중요: IAM 역할 또는 사용자에 최대 10개의 관리형 정책을 연결할 수 있습니다. 각 관리형 정책의 크기는 6,144자를 초과할 수 없습니다. 자세한 내용은 IAM 및 STS 제한을 참조하십시오.

시나리오에 따라 다음 섹션 중 하나의 단계를 완료합니다.

  • 새로운 IAM 역할에 기존 IAM 관리형 정책 추가
  • 새로운 IAM 역할에 새로운 IAM 관리형 정책 추가
  • 기존 IAM 역할에 새로운 IAM 관리형 정책 추가

​해결 방법

새로운 IAM 역할에 기존 IAM 관리형 정책 추가

1.    AWS CloudFormation 템플릿에서 IAM 관리형 정책의 Amazon 리소스 이름(ARN)을 전달하는 데 사용할 수 있는 하나 이상의 파라미터를 생성합니다. 다음의 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.    템플릿의 [리소스] 섹션에서 AWS::IAM::Role 유형의 리소스에 대해 Ref를 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 구문을 사용하여 AWS::IAM::Role 리소스에 IAM 관리형 정책 리소스를 연결합니다.

예를 들어 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.    템플릿의 [리소스] 섹션에서 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 템플릿을 기반으로 기존 스택을 업데이트합니다 .


이 문서가 도움이 되었습니까?

AWS에서 개선해야 할 부분이 있습니까?


도움이 필요하십니까?