AWS re:Post을(를) 사용하면 다음에 동의하게 됩니다. AWS re:Post 이용 약관

스택 세트를 사용하여 AWS CloudFormation 리소스를 배포하기 위한 IAM 모범 사례에는 어떤 것이 있습니까?

4분 분량
0

스택 세트를 사용하여 AWS CloudFormation 리소스를 배포하기 위한 AWS Identity and Access Management(IAM) 모범 사례를 알고 싶습니다.

해결 방법

수신한 오류를 확인하십시오. 그런 다음, 아래에 나온 관련 섹션의 단계에 따라 오류를 해결하십시오.
참고: AWS Command Line Interface(AWS CLI) 명령 실행 시 오류가 발생하는 경우, AWS CLI 오류 문제 해결을 참조하십시오. 또한 최신 AWS CLI 버전을 사용하고 있는지 확인하십시오.

스택 세트의 가장 일반적인 IAM 권한 오류

Error: "Account 111111111111 should have 'AWSCloudFormationStackSetExecutionRole' role with trust relationship to Role 'AWSCloudFormationStackSetAdministrationRole'."

이 오류는 일반적으로 IAM 역할 AWSCloudFormationStackSetExecutionRole 또는 AWSCloudFormationStackSetAdministrationRole이 없을 때 발생합니다. 관리자와 대상 계정 간의 신뢰 관계가 올바르게 설정되지 않은 경우에도 발생합니다.

이 오류를 해결하려면 다음 단계를 완료하십시오.

  1. 관리자 계정에 IAM 역할 AWSCloudFormationStackSetExecutionRoleAWSCloudFormationStackSetAdministrationRole이 있는지 확인합니다. 역할의 이름이 올바른지 확인하십시오. 예를 들어 관리 역할은 AWSCloudFormationStackSetExecutionRole이어야 합니다. 각 대상 계정의 역할 이름은 AWSCloudFormationStackSetExecutionRole이어야 합니다.
    참고: 다음 AWS CloudFormation 템플릿을 사용하여 스택 세트에 대한 기본 IAM 권한을 설정할 수도 있습니다.

  2. IAM 역할이 있는 경우에는 역할 간에 신뢰 관계가 있는지 확인합니다.

    IAM 역할 간의 기본 신뢰 관계를 활성화하는 다음 예제 코드 스니펫을 검토하십시오.

    AWSCloudFormationStackSetAdministrationRole 신뢰 관계:

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": {
            "Service": "cloudformation.amazonaws.com"
          },
          "Action": "sts:AssumeRole"
        }
      ]
    }

    AWSCloudFormationStackSetAdministrationRole 인라인 정책:

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Action": [
            "sts:AssumeRole"
          ],
          "Resource": [
            "arn:*:iam::*:role/AWSCloudFormationStackSetExecutionRole"
          ],
          "Effect": "Allow"
        }
      ]
    }

    AWSCloudFormationStackSetExecutionRole 신뢰 관계 섹션:

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": {
            "AWS": "arn:aws:iam::admin_account_id:root"
          },
          "Action": "sts:AssumeRole"
        }
      ]
    }

Error : "Resource handler returned message: "Account used is not a delegated administrator (Service: CloudFormation, Status Code: 400, Request ID: xxxxxx-xxxx-xxxx-xxxx-xxxxxxxx)" (RequestToken:xxxxx-xxx-xxxxx, HandlerErrorCode: InvalidRequest)" when deploying StackSet using CloudFormation resource type "AWS::CloudFormation::StackSet"

-또는-

Error (AWS CLI): "An error occurred (ValidationError) when calling the ListStackSets operation: Account used is not a delegated administrator"

이러한 오류는 스택 세트 배포에 사용된 AWS 계정이 위임된 관리자로 등록되지 않았음을 나타냅니다. 또는 IAM 역할에 필요한 권한이 없기 때문에 이러한 오류가 발생합니다. 조직에는 한 번에 최대 5명의 등록된 위임된 관리자가 있을 수 있습니다. 위임된 관리자는 조직의 모든 계정 또는 특정 OU(조직 단위)에 배포하도록 선택할 수 있습니다.

오류를 해결하려면 다음 단계를 완료하십시오.

  1. 다음 AWS CLI 명령을 사용하여 계정이 위임된 관리자 계정으로 등록되어 있는지 확인합니다.

    aws organizations list-delegated-administrators \
      --service-principal=member.org.stacksets.cloudformation.amazonaws.com
  2. 계정이 위임된 관리자로 등록되어 있지 않은 경우, 등록합니다. 또는 다음 AWS CLI 명령을 사용하여 위임된 관리자를 등록합니다.

    aws organizations register-delegated-administrator \
      --service-principal=member.org.stacksets.cloudformation.amazonaws.com \
      --account-id="memberAccountId"

    참고: memberAccountId를 AWS 계정 ID로 바꾸십시오.

  3. 계정이 위임된 관리자인 경우 IAM 역할에 대해 다음 IAM 권한을 확인합니다.

    organizations:ListDelegatedAdministrators
    cloudformation:TagResource
    cloudformation:CreateStackSet

    참고: 위임된 관리자는 조직의 계정에 배포할 수 있는 전체 권한을 갖습니다. 관리 계정은 특정 OU에 배포하거나 특정 스택 세트 작업을 수행하도록 위임된 관리자 권한을 제한할 수 없습니다.

Error: "ResourceStatusReason:Invalid principal in policy: "AWS":"arn:aws:iam::111111111111:role/myDeploymentRole" (Service: AmazonIdentityManagement; Status Code: 400; Error Code: MalformedPolicyDocument; Request ID: xxxxxx-xxxx-xxxx-xxxx-xxxxxx; Proxy: null)"

이 오류 메시지는 IAM 신뢰 정책의 주요 요소 값이 올바르지 않음을 나타냅니다. 이 오류를 해결하는 방법에 대한 자세한 내용은 IAM 신뢰 정책 오류 “Failed to update trust policy. Invalid principal in policy"를 해결하려면 어떻게 해야 합니까?를 참조하십시오.

Error: "ResourceLogicalId:myDeploymentRole, ResourceType:AWS::IAM::Role, ResourceStatusReason:myDeploymentRole already exist"

Error: "ResourceLogicalId:myDeploymentRolePolicy, ResourceType:AWS::IAM::ManagedPolicy, ResourceStatusReason:myDeploymentRolePolicy already exist"

이러한 오류는 AWS IAM이 지역 서비스가 아니라 전 세계에서 사용 가능한 서비스이기 때문에 발생합니다. AWS 서비스는 지역 서비스에 대한 AWS 리전에서 콘텐츠를 처리하고 저장합니다. IAM은 글로벌 서비스이므로 한 리전에서 IAM 역할 또는 정책을 생성하면 모든 리전에서 해당 역할 또는 정책을 사용할 수 있습니다.

아래 나열된 대로 CloudFormation 스택 세트 템플릿에서 조건을 정의하여 이 오류를 해결하십시오. 지역 조건을 지정하면 스택은 IAM 리소스를 하나의 리전(us-east-1)에만 배포합니다. 작업이 완료되면 리전의 모든 스택 계정이 성공적으로 업데이트됩니다.

아래 YAML 템플릿 스니펫은 us-east-1 리전에만 IAM 리소스를 배포하는 방법을 보여줍니다.

AWSTemplateFormatVersion: "2010-09-09"
Conditions:
  RoleCreate: !Equals
    - !Ref AWS::Region
    - us-east-1

Resources:
  myIAMRole:
    Type: 'AWS::IAM::Role'
    Condition: RoleCreate
    Properties:
      RoleName: 'TestingIAMRole2'
      AssumeRolePolicyDocument:
        Version: "2012-10-17"
        Statement:
          - Effect: Allow
            Principal:
              Service:
                - ec2.amazonaws.com
            Action:
              - 'sts:AssumeRole'
AWS 공식
AWS 공식업데이트됨 9달 전