AWS를 사용하여 AWS IAM ID 센터 권한 세트를 코드로 관리합니다. CodePipeline - AWS 권장 가이드

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

AWS를 사용하여 AWS IAM ID 센터 권한 세트를 코드로 관리합니다. CodePipeline

작성자: Andre Cavalcante(AWS), Claison Amorim(AWS)

코드 리포지토리: - 파이프라인 aws-iam-identity-center

환경: 프로덕션

기술: 보안, ID, 규정 준수 DevOps

AWS 서비스: AWS, AWS CodeBuild, AWS CodeCommit CodePipeline, AWS IAM 아이덴티티 센터

요약

AWS IAM Identity Center(AWS Single Sign-On 후속)를 사용하면 모든 AWS 계정과 애플리케이션에 대한 AWS Single Sign-On(SSO) 액세스를 중앙에서 관리할 수 있습니다. IAM Identity Center에서 사용자 자격 증명을 생성하고 관리하거나 Microsoft Active Directory 도메인 또는 외부 ID 제공업체(idP)와 같은 기존 자격 증명 소스를 연결할 수 있습니다. IAM Identity Center는 권한 세트를 사용하여 AWS 환경에 대한 세분화된 액세스를 정의, 사용자 지정 및 할당할 수 있는 통합 관리 환경을 제공합니다. 권한 세트는 AWS IAM Identity Center ID 스토어 또는 외부 IdP의 페더레이션 사용자 및 그룹에 적용됩니다.

이 패턴은 AWS Organizations에서 조직으로 관리되는 다중 계정 환경에서 IAM Identity Center 권한 세트를 코드로 관리하는 데 도움이 됩니다. 이 패턴을 사용하면 다음을 달성할 수 있습니다.

  • 권한 집합을 만들고, 삭제하고, 업데이트

  • 대상 AWS 계정, 조직 단위(OU) 또는 조직 루트에 대한 권한 집합 할당을 생성, 업데이트 또는 삭제합니다.

IAM ID 센터 권한 및 할당을 코드로 관리하기 위해 이 솔루션은 AWS, CodeCommit AWS 및 AWS를 사용하는 지속적 통합 및 지속적 전송 (CI/CD) 파이프라인을 배포합니다. CodeBuild CodePipeline 리포지토리에 저장하는 JSON 템플릿에서 권한 세트와 할당을 관리합니다. CodeCommit Amazon EventBridge 규칙이 리포지토리 변경을 감지하거나 대상 OU의 계정 수정을 감지하면 AWS Lambda 함수를 시작합니다. Lambda 함수는 IAM Identity Center의 권한 집합과 할당을 업데이트하는 CI/CD 파이프라인을 시작합니다.

사전 조건 및 제한 사항

사전 조건 

  • AWS Organizations에서 하나의 조직으로 관리되는 다중 계정 환경. 자세한 내용은 조직 생성을 참조하세요.

  • 자격 증명 소스로 활성화 및 구성된 IAM Identity Center. 자세한 내용은 IAM Identity Center 설명서의 시작하기를 참조하세요.

  • IAM Identity Center의 위임 관리자로 등록된 멤버 계정. 지침은 IAM Identity Center 설명서의 멤버 계정 등록을 참조하세요.

  • IAM Identity Center 위임 관리자 계정 및 조직의 관리 계정에 AWS CloudFormation 스택을 배포할 수 있는 권한. 자세한 내용은 설명서의 액세스 제어를 참조하십시오. CloudFormation

  • Identity Center의 Amazon Simple Storage Service(S3) 버킷은 관리자에게 아티팩트 코드를 업로드하도록 위임했습니다. 지침은 버킷 생성을 참조하세요.

  • 조직의 관리 계정의 계정 ID. 지침은 AWS 계정 ID 찾기를 참조하세요.

제한 사항

  • 이 패턴은 단일 계정 환경 또는 AWS Organizations에서 조직으로 관리되지 않는 계정에 대한 권한 세트를 관리하거나 할당하는 데 사용할 수 없습니다.

  • 권한 세트 이름, 할당 ID, IAM Identity Center 보안 주체 유형 및 ID는 배포 후 수정할 수 없습니다.

  • 이 패턴은 사용자 지정 권한을 생성하고 관리하는 데 도움이 됩니다. 이 패턴을 사용하여 미리 정의된 권한을 관리하거나 할당할 수 없습니다.

  • 이 패턴은 조직의 관리 계정에 대한 권한 집합을 관리하는 데 사용할 수 없습니다.

아키텍처

기술 스택

  • AWS CodeBuild

  • AWS CodeCommit

  • AWS CodePipeline

  • 아마존 EventBridge

  • AWS Identity Center

  • Lambda

  • Organizations

대상 아키텍처 

CI/CD 파이프라인 및 AWS CodeCommit 리포지토리를 사용하여 AWS IAM ID 센터에서 권한 세트를 관리합니다.

이 다이어그램은 다음 워크플로를 보여줍니다.

  1. 사용자는 다음 중 하나를 변경합니다.

    1. 리포지토리에 하나 이상의 변경 사항을 커밋합니다. CodeCommit

    2. AWS Organizations의 조직 단위(OU)에서 계정을 수정

  2. 사용자가 CodeCommit 리포지토리에 변경 사항을 커밋하면 CodeChange EventBridge 규칙이 변경을 감지하고 IAM Identity Center의 위임 관리자 계정에서 Lambda 함수를 시작합니다. 규칙은 스토어에 있는 특정 파일(예: README.md 파일)의 변경에는 반응하지 않습니다.

    사용자가 조직 단위의 계정을 수정한 경우 MoveAccount EventBridge 규칙은 변경을 감지하고 조직의 관리 계정에서 Lambda 함수를 시작합니다.

  3. 시작된 Lambda 함수는 CI/CD 파이프라인을 시작합니다. CodePipeline

  4. CodePipeline CodebuildTemplateValidation CodeBuild 프로젝트를 시작합니다.

  5. CodebuildTemplateValidation CodeBuild 프로젝트는 CodeCommit 저장소의 Python 스크립트를 사용하여 권한 집합 템플릿의 유효성을 검사합니다. CodeBuild 다음을 검증합니다.

    • 권한 집합 이름은 고유합니다.

    • 할당문 ID(Sid)는 고유합니다.

    • CustomPolicy 파라미터의 정책 정의가 유효합니다. (이 확인에는 AWS Identity and Access Management Access Analyzer를 사용합니다)

    • 관리형 정책의 Amazon 리소스 이름(ARN)이 유효합니다.

  6. CodebuildPermissionSet CodeBuild 프로젝트는 Python용 AWS SDK (Boto3) 를 사용하여 IAM ID 센터의 권한 세트를 삭제, 생성 또는 업데이트합니다. SSOPipeline:true 태그가 있는 권한 집합만 영향을 받습니다. 이 파이프라인을 통해 관리되는 모든 권한 집합에는 이 태그가 있습니다.

  7. CodebuildAssignments CodeBuild 프로젝트는 Terraform을 사용하여 IAM ID 센터에서 할당을 삭제, 생성 또는 업데이트합니다. Terraform 백엔드 상태 파일은 동일한 계정의 S3 버킷에 저장됩니다.

  8. CodeBuild 조직의 관리 계정에서 lookup IAM 역할을 맡습니다. 권한을 부여하거나 취소하는 데 필요한 리소스를 나열하기 위해 조직 및 identitystore API를 직접적으로 호출합니다.

  9. CodeBuild IAM ID 센터의 권한 집합 및 할당을 업데이트합니다.

자동화 및 규모 조정

다중 계정 환경의 모든 새 계정은 AWS Organizations의 특정 조직 단위로 이동되므로 이 솔루션이 자동으로 실행되어 할당 템플릿에서 지정한 모든 계정에 필요한 권한 집합을 부여합니다. 추가 자동화 또는 규모 조정 작업이 필요하지 않습니다.

대규모 환경에서는 IAM Identity Center에 대한 API 요청 수가 많기 때문에 이 솔루션이 더 느리게 실행될 수 있습니다. Terraform과 Boto3는 자동으로 제한을 관리하여 성능 저하를 최소화합니다.

도구

서비스

  • AWS는 AWS CloudFormation 리소스를 설정하고, 빠르고 일관되게 프로비저닝하고, AWS 계정 및 지역 전반의 수명 주기 전반에 걸쳐 리소스를 관리할 수 있도록 지원합니다.

  • CodeBuildAWS는 소스 코드를 컴파일하고, 단위 테스트를 실행하고, 배포할 준비가 된 아티팩트를 생성하는 데 도움이 되는 완전관리형 빌드 서비스입니다. 

  • CodeCommitAWS는 자체 소스 제어 시스템을 관리할 필요 없이 Git 리포지토리를 비공개로 저장하고 관리할 수 있는 버전 제어 서비스입니다.

  • AWS는 소프트웨어 릴리스의 여러 단계를 신속하게 모델링 및 구성하고 소프트웨어 변경 사항을 지속적으로 릴리스하는 CodePipeline 데 필요한 단계를 자동화하도록 지원합니다.

  • EventBridgeAmazon은 다양한 소스의 실시간 데이터와 애플리케이션을 연결하는 데 도움이 되는 서버리스 이벤트 버스 서비스입니다. AWS Lambda 함수, API 대상을 사용하는 HTTP 간접 호출 엔드포인트 또는 다른 AWS 계정의 이벤트 버스를 예로 들 수 있습니다.

  • AWS IAM Identity Center를 사용하면 모든 AWS 계정과 클라우드 애플리케이션에 대한 AWS Single Sign-On(SSO) 액세스를 중앙에서 관리할 수 있습니다.

  • AWS Organizations는 사용자가 생성하고 중앙에서 관리하는 조직으로 여러 AWS 계정을 통합할 수 있는 계정 관리 서비스입니다.

  • AWS SDK for Python(Boto3)는 Python 애플리케이션, 라이브러리 또는 스크립트를 AWS 서비스와 통합하는 데 도움이 되는 소프트웨어 개발 키트입니다.

  • Amazon Simple Storage Service(S3)는 원하는 양의 데이터를 저장, 보호 및 검색하는 데 도움이 되는 클라우드 기반 객체 스토리지 서비스입니다.

코드 리포지토리

이 패턴의 코드는 aws-iam-identity-center-pipeline 리포지토리에서 사용할 수 있습니다. 리포지토리의 템플릿 폴더에는 권한 집합과 할당에 대한 샘플 템플릿이 포함되어 있습니다. 또한 대상 계정에 CI/CD 파이프라인 및 AWS 리소스를 배포하기 위한 AWS CloudFormation 템플릿도 포함되어 있습니다.

모범 사례

  • 권한 집합과 할당 템플릿을 수정하기 전에 조직의 권한 세트를 계획하는 것이 좋습니다. 어떤 권한이 있어야 하는지, 권한 집합을 어떤 계정 또는 OU에 적용해야 하는지, 권한 집합의 영향을 받아야 하는 IAM Identity Center 보안 주체(사용자 또는 그룹)를 고려하세요. 권한 집합 이름, 연결 ID, IAM Identity Center 보안 주체 유형 및 ID는 배포 후 수정할 수 없습니다.

  • 최소 권한 원칙을 준수하고 작업을 수행하는 데 필요한 최소 권한을 부여하세요. 자세한 내용은 IAM 설명서의 최소 권한 부여보안 모범 사례를 참조하세요.

에픽

작업설명필요한 기술

리포지토리를 복제합니다.

bash 쉘에서 다음 명령을 입력합니다. 이렇게 하면 -pipeline aws-iam-identity-center 리포지토리가 복제됩니다. GitHub

git clone https://github.com/aws-samples/aws-iam-identity-center-pipeline.git
DevOps 엔지니어

권한 세트를 정의합니다.

  1. 복제된 리포지토리에서 templates/permissionsets 폴더로 이동한 다음 사용 가능한 템플릿 중 하나를 엽니다.

  2. Name 파라미터에 권한 집합의 이름을 입력합니다. 이 값은 고유해야 하며 배포 후에는 변경할 수 없습니다.

  3. Description 파라미터에서 사용 사례와 같은 권한 집합에 대한 간략한 설명을 추가하세요.

  4. SessionDuration 파라미터에 사용자가 AWS 계정에 로그인할 수 있는 시간을 지정합니다. ISO-8601 기간 형식(Wikipedia)을 사용하세요. (예: PT4H는 4시간) 정의된 값이 없는 경우 IAM Identity Center의 기본값은 1시간입니다.

  5. 권한 집합의 정책을 사용자 지정합니다. 다음 파라미터는 모두 선택 사항이며 배포 후 수정할 수 있습니다. 권한 집합의 정책을 정의하려면 다음 파라미터 중 하나 이상을 사용해야 합니다.

    • ManagedPolicies 파라미터에 할당하려는 AWS 관리형 정책의 ARN을 입력합니다.

    • CustomerManagedPolicies 파라미터에 할당하려는 고객 관리형 정책의 이름을 입력합니다. ARN을 사용하지 마세요.

    • PermissionBoundary 파라미터에서 다음을 수행하여 권한 경계를 할당하세요.

      • AWS 관리형 정책을 권한 경계로 사용하는 경우 PolicyType에서는 AWS를 입력하고, Policy에서는 해당 정책의 ARN을 입력합니다.

      • 고객 관리형 정책을 권한 경계로 사용하는 경우 PolicyType에서는 Customer를 입력하고, Policy에서는 해당 정책의 이름을 입력합니다. ARN을 사용하지 마세요.

    • CustomPolicy 파라미터에서 할당하려는 JSON 형식의 사용자 지정 정책을 정의합니다. JSON 정책 문서의 구조 및 내용에 대한 자세한 정보는 JSON 정책 개요를 참조하세요.

  6. 권한 집합 템플릿을 저장하고 닫습니다. 권한 집합의 이름과 동일한 이름으로 파일을 저장하는 것이 좋습니다.

  7. 이 프로세스를 반복하여 조직에 필요한 수만큼 권한 집합을 만들고 필요하지 않은 샘플 템플릿은 삭제하세요.

DevOps 엔지니어

할당을 정의하세요.

  1. 복제된 리포지토리에서 templates/assignments 폴더로 이동한 다음 iam-identitycenter-assigments.json을 엽니다. 이 파일은 AWS 계정 또는 OU에 권한 세트를 할당하는 방법을 설명합니다.

  2. SID 파라미터에 할당을 위한 식별자를 입력합니다. 이 값은 고유해야 하며 배포 후에는 수정할 수 없습니다.

  3. Target 파라미터에서 권한 집합을 적용할 계정 또는 조직을 정의합니다. 유효한 값은 계정 ID, OU ID, OU 이름 또는 root입니다. root 관리 계정을 제외한 조직의 모든 멤버 계정에 사용 권한 세트를 할당합니다. 값을 큰따옴표로 입력하고 여러 값은 쉼표로 구분합니다. ID를 찾는 방법에 대한 지침은 계정 세부 정보 보기 또는 OU 세부 정보 보기를 참조하세요.

  4. PrincipalType 파라미터에 권한 설정의 영향을 받을 IAM Identity Center 보안 주체의 유형을 입력합니다. 유효한 값은 USER 또는 GROUP입니다. 이 값은 배포 후 수정할 수 없습니다.

  5. PrincipalID 파라미터에 권한 설정의 영향을 받을 IAM Identity Center ID 스토어의 사용자 또는 그룹 이름을 입력합니다. 이 값은 배포 후 수정할 수 없습니다.

  6. PermissionSetName 파라미터에 할당하려는 권한 집합의 이름을 입력합니다.

  7. 2~6단계를 반복하여 이 파일에 필요한 만큼 할당을 생성합니다. 일반적으로 각 권한 집합에는 하나의 할당이 있습니다. 필요하지 않은 샘플 할당은 모두 삭제하세요.

  8. iam-identitycenter-assigments.json 파일을 저장하고 닫습니다.

DevOps 엔지니어
작업설명필요한 기술

파일을 S3 버킷에 업로드합니다.

  1. 복제된 리포지토리를 .zip 파일로 압축합니다.

  2. IAM Identity Center 위임 관리자 계정으로 로그인합니다.

  3. https://console.aws.amazon.com/s3/에서 S3 콘솔을 엽니다.

  4. 왼쪽 탐색 창에서 버킷을 선택합니다.

  5. 이 솔루션을 배포하는 데 사용할 버킷을 선택합니다.

  6. .zip 파일을 S3 버킷에 업로드합니다. 지침은 객체 업로드를 참조하세요.

DevOps 엔지니어

IAM Identity Center 위임 관리자 계정에 리소스를 배포하세요.

  1. IAM 아이덴티티 센터 위임 관리자 계정에서 https://console.aws.amazon.com/cloudformation/ 에서 CloudFormation 콘솔을 엽니다.

  2. iam-identitycenter-pipeline.yaml 템플릿을 배포합니다. 스택에 명확하고 설명이 포함된 이름을 지정하고, 지침에 따라 파라미터를 업데이트하세요. 지침은 설명서의 스택 생성을 참조하십시오. CloudFormation

DevOps 엔지니어

AWS Organizations 관리 계정에 리소스를 배포합니다.

  1. 조직의 관리 계정에 로그인합니다.

  2. https://console.aws.amazon.com/cloudformation/ 에서 CloudFormation 콘솔을 엽니다.

  3. 탐색 모음에서 현재 표시된 AWS 리전의 이름을 선택합니다. us-east-1 리전을 선택합니다. 이 지역은 MoveAccount EventBridge 규칙이 조직 변경과 관련된 AWS CloudTrail 이벤트를 감지할 수 있도록 하기 위해 필요합니다.

  4. iam-identitycenter-organization 템플릿을 배포합니다. 스택에 명확하고 설명이 포함된 이름을 지정하고, 지침에 따라 파라미터를 업데이트하세요. 지침은 설명서의 스택 생성을 CloudFormation 참조하십시오.

DevOps 엔지니어
작업설명필요한 기술

권한 집합 및 할당을 업데이트하세요.

MoveAccountAmazon EventBridge 규칙이 조직 내 계정에 대한 수정 사항을 감지하면 CI/CD 파이프라인이 자동으로 시작하여 권한 집합을 업데이트합니다. 예를 들어, 할당 JSON 파일에 지정된 OU에 계정을 추가하면 CI/CD 파이프라인은 권한 세트를 새 계정에 적용합니다.

배포된 권한 집합과 할당을 수정하려면 JSON 파일을 업데이트한 다음 IAM Identity Center 위임 관리자 계정의 CodeCommit 리포지토리에 커밋하십시오. 지침은 설명서의 커밋 생성을 참조하십시오. CodeCommit

CI/CD 파이프라인을 사용하여 이전에 배포한 권한 집합과 연결을 관리할 때는 다음 사항에 유의하세요.

  • 권한 집합의 이름을 변경하면 CI/CD 파이프라인은 기존 권한 집합을 삭제하고 새 권한 집합을 만듭니다.

  • 이 파이프라인은 SSOPipeline:true 태그가 있는 권한 집합만 관리합니다.

  • 리포지토리의 같은 폴더에 여러 권한 집합과 할당 템플릿을 둘 수 있습니다.

  • 템플릿을 삭제하면 파이프라인이 해당 할당 또는 권한 집합을 삭제합니다.

  • 전체 할당 JSON 블록을 삭제하면 파이프라인이 IAM Identity Center에서 할당을 삭제합니다.

  • AWS 계정에 할당된 권한 집합은 삭제할 수 없습니다. 우선 권한 집합의 할당을 취소해야 합니다.

DevOps 엔지니어

문제 해결

문제Solution

액세스 거부 오류

CloudFormation 템플릿과 템플릿 내에 정의된 리소스를 배포하는 데 필요한 권한이 있는지 확인하십시오. 자세한 내용은 CloudFormation 설명서의 액세스 제어를 참조하십시오.

검증 단계의 파이프라인 오류

이 오류는 권한 집합이나 할당 템플릿에 오류가 있는 경우 나타납니다.

  1. 에서 CodeBuild 빌드 세부 정보를 확인하세요.

  2. 구축 로그에서 구축 실패 원인에 대한 자세한 정보를 제공하는 유효성 검사 오류를 찾아보세요.

  3. 권한 집합 또는 할당 템플릿을 업데이트한 다음 리포지토리에 커밋합니다.

  4. CI/CD 파이프라인이 프로젝트를 다시 시작합니다. CodeBuild 상태를 모니터링하여 유효성 검사 오류가 해결되었는지 확인합니다.

관련 리소스