IAM Roles Anywhere를 사용하여 AWS 외부에서 실행되는 애플리케이션에서 AWS 리소스 액세스 하는 방안

5분 분량
콘텐츠 수준: 중급
1

해당 기사에서는 AWS Identity and Access Management(IAM) Roles Anywhere를 사용하여 AWS 외부에서 실행되는 애플리케이션에서 AWS 리소스를 액세스하는 방법에 대해서 설명합니다.

AWS IAM Roles Anywhere를 사용하여 AWS 외부에서 실행되는 서버, 컨테이너 및 애플리케이션과 같은 워크로드에 대한 IAM의 임시 보안 자격 증명을 얻을 수 있습니다. 워크로드는 AWS 애플리케이션에서 AWS 리소스에 액세스 하는 데 사용하는 것과 동일한 IAM 정책 및 IAM 역할을 사용할 수 있습니다. IAM Roles Anywhere를 사용하면 AWS 외부에서 실행되는 워크로드에 대한 장기 자격증명을 관리할 필요가 없습니다.

IAM Roles Anywhere를 사용하려면 워크로드가 인증 기관(CA)에서 발급한 X.509 인증서를 사용해야 합니다. 공개 키 인프라(PKI)와 IAM Roles Anywhere 간에 신뢰를 설정하기 위해 IAM Roles Anywhere에 CA를 트러스트 앵커로 등록합니다. AWS Private Certificate Authority(AWS Private CA)를 사용하여 CA를 생성한 다음 이를 사용하여 IAM Roles Anywhere와의 신뢰를 설정할 수 있습니다.

또한 프로파일에 하나 이상의 역할을 추가하고 IAM Roles Anywhere에서 이러한 역할을 맡도록 하면 애플리케이션에서 해당 CA에서 발행한 클라이언트 인증서를 사용하여 AWS에 대해 보안 요청을 실행하고 AWS 환경에 액세스하기 위한 임시 보안 자격 증명을 얻을 수 있습니다.

해당 기사에 최종 목표는 IAM Roles Anywhere를 사용하여 임시 자격 증명을 얻는 경우에만 S3 Bucket 리스트를 출력하는 것을 확인합니다.

사전 요구 사항

  1. Private CA
  2. Private CA에서 발급한 X.509 인증서
  3. 외부 서버

사용 사례

  • On-premise 데이터를 Amazon Simple Storage Service(Amazon S3)에 백업
  • Amazon DynamoDB 및 Amazon Simple Queue Service(Amazon SQS)와 같은 기본 AWS 서비스에 대한 On-premise Kubernetes 워크로드 액세스
  • AWS 외부 워크로드에서 AWS Secrets Manager에 저장된 비밀에 액세스
  • On-premise 소스에서 AWS Security Hub로 보안 결과 보내기
  • 단계적 마이그레이션 과정에서 하이브리드 워크로드가 AWS 서비스에 액세스 할 수 있도록 지원

단계 1. Private CA 생성

AWS Private CA를 사용하면 조직에서 내부적으로 사용 할 루트 CA 또는 하위 CA를 생성하여 조직의 요구 사항과 일치하는 신뢰 관계의 감사 가능한 계층 구조를 만들 수 있습니다. AWS Private CA를 만드는 방법은 다음 문서를 참고 하십시오. [1]

여기에 이미지 설명 입력

  • 계정에는 귀하가 Private CA를 생성한 시점부터 시작하여 월별 요금이 청구됩니다. Private CA 생성 전 가격 책정을 이해하였는지 확인이 필요하고, AWS Private CA 요금 정보는 다음 문서를 참고 하십시오. [2]

단계 2. Private PKI 인증서 요청

AWS Private CA에서 생성한 기존 Private CA에 액세스 할 수 있는 경우 ACM은 Private PKI에서 사용하기에 적합한 인증서를 요청할 수 있으며, Private ACM 인증서는 X.509 표준을 따릅니다. ACM Private PKI 인증서를 요청하는 방법은 다음 문서를 참고 하십시오. [3]

여기에 이미지 설명 입력

결과적으로 최종 Entity X.509 인증서가 클라이언트에 제공되면 루트 CA로 돌아가는 인증 경로에서 신뢰 체인을 구성하려고 시도합니다. 그렇기 위해서는 루트 CA가 신뢰 저장소에 등록이 되어야 합니다. 해당 기사에서는 IAM Roles Anywhere 트러스트 앵커에 루트 CA를 등록합니다.

최종 엔티티 인증서 검증

단계 3. Private PKI 인증서 추출 및 확인, 개인키 복호화

AWS Private CA에 의해 발급된 인증서를 추출할 수 있습니다. 외부 서버에 인증서, 인증서 체인, 암호화 된 프라이빗 키를 추출하여 저장합니다.

여기에 이미지 설명 입력

  • OpenSSL을 사용하여 인증서 내용 확인

$ openssl x509 -in <Your Certificate Name> -text -noout

여기에 이미지 설명 입력

  • OpenSSL을 사용하여 개인 키 파일 복호화

$ openssl rsa -in <Your Private Key Name> -out <Decrypt Prviate Key Name>

여기에 이미지 설명 입력

단계 4. IAM Roles Anywhere 트러스트 앵커 구성 [4]

트러스트 앵커(Trust anchors)를 구성하여 IAM Roles Anywhere와 인증 기관(CA) 간에 신뢰를 설정합니다. AWS 외부에서 실행되는 워크로드는 임시 AWS 자격 증명 대신 신뢰할 수 있는 인증서를 사용하여 트러스트 앵커로 인증할 수 있습니다.

여기에 이미지 설명 입력

단계 5. IAM Roles Anywhere 프로파일 구성 [4]

IAM Roles Anywhere 프로파일(Profiles)을 사용하면 역할 자격 증명의 범위를 대상 권한 수준으로 낮출 수 있는 세션 정책을 사전 구성할 수 있습니다. 프로파일에 역할을 연결하고 세션 정책을 지정하면 연결된 역할에 대한 자격 증명을 요청할 때마다 선택한 세션 정책을 사용하도록 IAM Roles Anywhere에 지시할 수 있습니다.

우선 IAM Roles Anywhere 서비스 주체를 신뢰하는 IAM 역할을 생성합니다. 또한 AWS 관리형 정책인 AmazonS3ReadOnlyAccess를 역할에 연결하여 권한을 부여합니다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": [
                    "rolesanywhere.amazonaws.com"
                ]
            },
            "Action": [
              "sts:AssumeRole",
              "sts:TagSession",
              "sts:SetSourceIdentity"
            ],
            "Condition": {
              "ArnEquals": {
                "aws:SourceArn": [
                  "arn:aws:rolesanywhere:region:account:trust-anchor/TA_ID"
                ]
              }
            }
        }
    ]
}

다음으로 프로파일을 구성합니다. 프로파일에서 IAM 관리형 정책으로 생성된 세션에 대한 권한을 제한할 수도 있습니다.

여기에 이미지 설명 입력

여기에 이미지 설명 입력

단계 6. 외부 서버에서 AWS 리소스 액세스 확인

IAM Roles Anywhere에서 임시 보안 자격 증명을 얻으려면 aws_signing_helper를 사용할 수 있습니다. aws_signing_helper는 인증서로 서명을 만들어 엔드포인트를 호출하여 자격 증명을 얻을 수 있습니다. 다음 문서에서 플랫폼 별 다운로드를 받으실 수 있습니다. [5] 자격증명을 제공하기 위해 IAM Roles Anywhere는 CreateSession API를 사용합니다. API는 인증에 사용된 X.509 인증서와 연결된 키를 사용하여 서명으로 요청을 인증합니다. [6]

$ wget https://rolesanywhere.amazonaws.com/releases/1.0.5/X86_64/Linux/aws_signing_helper
$ chmod +x aws_signing_helper
$ ls -al

여기에 이미지 설명 입력

  • IAM Roles Anywhere에서 임시 보안 자격 증명을 얻지 않으면, API 호출이 되지 않는 것을 볼 수 있습니다.

여기에 이미지 설명 입력

  • IAM Roles Anywhere에서 임시 보안 자격 증명을 얻으면, 아래와 같이 정상적으로 호출이 되는 것을 볼 수 있습니다.
$ ./aws_signing_helper credential-process --trust-anchor-arn <Your Trust Anchor ARN> --profile-arn <Your Profile ARN> --role-arn <Your Role ARN> --certificate <Your Certificate> --private-key <Your Decrypt Private Key>

여기에 이미지 설명 입력

$ export AWS_ACCESS_KEY_ID=<Your AccessKeyId>
$ export AWS_SECRET_ACCESS_KEY=<Your SecretAccessKey>
$ export AWS_SESSION_TOKEN=<Your SessionToken>

여기에 이미지 설명 입력


관련 정보

[1] Private CA 만들기 - https://docs.aws.amazon.com/ko_kr/privateca/latest/userguide/create-CA.html

[2] AWS Private CA Pricing - https://aws.amazon.com/ko/private-ca/pricing/?nc1=h_ls

[3] 프라이빗 PKI 인증서 요청 - https://docs.aws.amazon.com/ko_kr/acm/latest/userguide/gs-acm-request-private.html

[4] Creating a trust anchor and profile in AWS Identity and Access Management Roles Anywhere - https://docs.aws.amazon.com/rolesanywhere/latest/userguide/getting-started.html

[5] Obtaining temporary security credentials from AWSIdentity and Access Management Roles Anywhere - https://docs.aws.amazon.com/rolesanywhere/latest/userguide/credential-helper.html

[6] Authentication mechanism in AWS Identity and Access Management Roles Anywhere - https://docs.aws.amazon.com/ko_kr/rolesanywhere/latest/userguide/authentication.html