AWS CLI를 사용하여 IAM 역할을 가정하려면 어떻게 해야 합니까?

6분 분량
0

AWS CLI(AWS 명령줄 인터페이스)를 사용하여 AWS Identity and Access Management(IAM) 역할을 위임하려고 합니다.

해결 방법

AWS CLI를 사용하여 IAM 역할을 위임하여 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스에 대한 읽기 전용 액세스 권한을 가지려면 다음을 수행하십시오.

참고: AWS CLI 명령을 실행할 때 오류가 발생하는 경우 최신 버전의 AWS CLI를 사용하고 있는지 확인하세요.

중요: 명령을 실행하면 다음 단계에서 암호와 같은 보안 인증이 일반 텍스트로 표시됩니다. IAM 역할을 담당한 후에는 암호를 변경하는 것이 가장 좋습니다.

역할을 위임할 권한이 있는 IAM 사용자 생성

1.    다음 명령을 통해 AWS CLI를 사용하여 IAM 사용자를 생성합니다.

참고: Bob을 사용자의 IAM 사용자 이름으로 대체합니다.

aws iam create-user --user-name Bob

2.    AWS CLI를 사용하여 Bob에게 권한을 부여하는 IAM 정책을 생성합니다. 선호하는 텍스트 편집기를 사용하여 IAM 정책을 정의하는 JSON 파일을 생성합니다. 예를 들어 Linux에서 일반적으로 사용되는 텍스트 편집기인 vim을 다음과 같이 사용할 수 있습니다.

참고: example을 사용자의 정책 이름, 사용자 이름, 역할, JSON 파일 이름, 프로파일 이름 및 키로 대체합니다.

vim example-policy.json

3.    example-policy.json 파일 내용은 다음과 비슷합니다.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "ec2:Describe*",
        "iam:ListRoles",
        "sts:AssumeRole"
      ],
      "Resource": "*"
    }
  ]
}

IAM 정책 생성에 대한 자세한 내용은 IAM 정책 만들기, IAM 자격 증명 기반 정책 예제IAM JSON 정책 참조를 참조하세요.

IAM 정책 생성

1.    다음 aws iam create-policy 명령을 사용합니다.

aws iam create-policy --policy-name example-policy --policy-document file://example-policy.json

aws iam create-policy 명령은 다음과 같이 IAM 정책의 Amazon 리소스 이름(ARN)을 포함하여 여러 정보를 출력합니다.

arn:aws:iam::123456789012:policy/example-policy

참고: 123456789012를 사용자 계정으로 대체합니다.

2.    출력의 IAM 정책 ARN을 기록하고, attach-user-policy 명령을 사용하여 Bob에 정책을 연결합니다. 그런 다음, 다음과 같이 list-attached-user-policies 명령을 사용하여 연결되었는지 확인합니다.

aws iam attach-user-policy --user-name Bob --policy-arn "arn:aws:iam::123456789012:policy/example-policy"
aws iam list-attached-user-policies --user-name Bob

IAM 역할의 신뢰 관계를 정의하는 JSON 파일 생성

1.    다음과 같이 신뢰 관계를 정의하는 JSON 파일을 생성합니다.

vim example-role-trust-policy.json

2.    example-role-trust-policy.json 파일 내용은 다음과 비슷합니다.

{
  "Version": "2012-10-17",
  "Statement": {
    "Effect": "Allow",
    "Principal": {
      "AWS": "123456789012"
    },
    "Action": "sts:AssumeRole"
  }
}

이 신뢰 정책에서는 계정 123456789012의 사용자 및 역할이 권한 정책에서 sts:AssumeRole 작업을 허용하는 경우, 이 역할을 수임할 수 있도록 허용합니다. 또한 특정 IAM 사용자만 IAM 역할을 위임할 수 있도록 신뢰 관계를 제한할 수도 있습니다. arn:aws:iam::123456789012:user/example-username과 비슷한 보안 주체를 지정하여 이를 수행할 수 있습니다. 자세한 내용은 AWS JSON 정책 요소: 보안 주체를 참조하세요.

IAM 역할 생성 및 정책 연결

Amazon Relational Database Service(Amazon RDS) 인스턴스에 대한 읽기 전용 액세스 권한을 보유한 Bob이 위임할 수 있는 IAM 역할을 생성합니다. IAM 역할은 IAM 사용자에 의해 위임되므로 IAM 사용자가 해당 역할을 위임할 수 있도록 하는 보안 주체를 지정해야 합니다. 예를 들어, arn:aws:iam::123456789012:root와 비슷한 보안 주체를 통해 계정의 모든 IAM 자격 증명에서 해당 역할을 위임할 수 있습니다. 자세한 내용은 역할을 만들어 IAM 사용자에게 권한 위임을 참조하세요.

1.    Amazon RDS DB 인스턴스에 대해 읽기 전용 액세스 권한을 보유한 IAM 역할을 생성합니다. 보안 요구 사항에 따라 IAM 역할에 IAM 정책을 연결합니다.

aws iam create-role 명령은 IAM 역할을 생성하고, 이전 섹션에서 생성한 JSON 파일에 따라 신뢰 관계를 정의합니다. aws iam attach-role-policy 명령은 AWS 관리형 정책 AmazonRDSReadOnlyAccess를 역할에 연결합니다. 보안 요구 사항에 따라 서로 다른 정책(관리형 정책 및 사용자 지정 정책)을 연결할 수 있습니다. aws iam list-attached-role-policies 명령은 IAM 역할 example-role에 연결된 IAM 정책을 보여줍니다. 다음 명령 예제를 참조하세요.

aws iam create-role --role-name example-role --assume-role-policy-document file://example-role-trust-policy.json
aws iam attach-role-policy --role-name example-role --policy-arn "arn:aws:iam::aws:policy/AmazonRDSReadOnlyAccess"
aws iam list-attached-role-policies --role-name example-role

참고: Bob에게 EC2 인스턴스에 대한 읽기 전용 액세스 권한이 있는지 확인하고 example-role을 위임할 수 있는지 확인합니다.

2.    다음 명령을 사용하여 Bob의 액세스 키를 생성합니다.

aws iam create-access-key --user-name Bob

AWS CLI 명령은 액세스 키 ID 및 보안 액세스 키를 출력합니다. 이 키를 기록해 두어야 합니다.

액세스 키 구성

1.    액세스 키를 구성하려면 기본 프로파일 또는 특정 프로파일을 사용합니다. 기본 프로파일을 구성하려면 aws configure를 실행합니다. 새 특정 프로파일을 생성하려면 *aws configure --profile example-*profile-name**을 실행합니다. 이 예제에서는 다음과 같이 기본 프로파일이 구성되었습니다.

aws configure
AWS Access Key ID [None]: ExampleAccessKeyID1
AWS Secret Access Key [None]: ExampleSecretKey1
Default region name [None]: eu-west-1
Default output format [None]: json

참고: [기본 리전 이름(Default region name)]에 [AWS 리전(AWS Region)]을 지정합니다.

AWS CLI 명령이 호출되는지 확인 후 IAM 사용자 액세스를 확인합니다.

1.    다음과 같이 aws sts get-caller-identity 명령을 실행합니다.

aws sts get-caller-identity

aws sts get-caller-identity 명령은 ARN을 포함하여 세 가지 정보를 출력합니다. 출력된 내용은 arn:aws:iam::123456789012:user/Bob와 비슷합니다. 이를 통해 AWS CLI 명령이 Bob으로 호출되는지 확인합니다.

2.    다음 명령을 실행하여 IAM 사용자에게 Amazon RDS DB 인스턴스에 대한 액세스 권한이 아니라, EC2 인스턴스에 대한 읽기 전용 액세스 권한이 있는지 확인합니다.

aws ec2 describe-instances --query "Reservations[*].Instances[*].[VpcId, InstanceId, ImageId, InstanceType]"
aws rds describe-db-instances --query "DBInstances[*].[DBInstanceIdentifier, DBName, DBInstanceStatus, AvailabilityZone, DBInstanceClass]"

aws ec2 describe-instances 명령은 eu-west-1 리전에 있는 모든 EC2 인스턴스를 보여줍니다. aws rds describe-db-instances 명령은 액세스 거부 오류 메시지를 생성해야 합니다. Bob에게는 Amazon RDS에 대한 액세스 권한이 없기 때문입니다.

IAM 역할 위임

다음 중 하나를 수행합니다.

~/.aws/config 파일에서 프로파일을 생성하여 IAM 역할을 사용합니다. 자세한 내용은 AWS CLI에서 IAM 역할 사용을 참조하세요.

-또는-

다음을 수행하여 IAM 역할을 위임합니다.

1.    다음 명령을 실행하여 역할의 ARN을 가져옵니다.

aws iam list-roles --query "Roles[?RoleName == 'example-role'].[RoleName, Arn]"

2.    명령은 IAM 역할을 나열하지만, 역할 이름별로 출력을 필터링할 수 있습니다. IAM 역할을 위임하라면 다음 명령을 실행합니다.

aws sts assume-role --role-arn "arn:aws:iam::123456789012:role/example-role" --role-session-name AWSCLI-Session

AWS CLI 명령은 몇 가지 정보를 출력합니다. 자격 증명 블록에 AccessKeyId, SecretAccessKeySessionToken이 필요합니다. 이 예제에서는 환경 변수 RoleAccessKeyID, RoleSecretKeyRoleSessionToken을 사용합니다. UTC 표준 시간대에 있는 만료 필드의 타임스탬프를 기록합니다. 타임스탬프는 IAM 역할의 임시 보안 인증 만료 시기를 나타냅니다. 임시 보안 인증이 만료된 경우 sts: AssumeRole API 호출을 다시 호출해야 합니다.

참고: DurationSeconds 파라미터를 사용하여 IAM 역할의 임시 자격 증명에 대한 최대 세션 기간 만료를 늘릴 수 있습니다.

IAM 역할을 위임하도록 환경 변수 생성 및 액세스 확인

1.    IAM 역할을 위임하도록 세 가지 환경 변수를 생성합니다. 이러한 환경 변수는 다음 출력으로 채워집니다.

export AWS_ACCESS_KEY_ID=RoleAccessKeyID
export AWS_SECRET_ACCESS_KEY=RoleSecretKey
export AWS_SESSION_TOKEN=RoleSessionToken

        참고: Windows 시스템의 경우 이 명령에서 exportset으로 바꾸십시오.

2.    다음 명령을 실행하여 IAM 역할을 위임하는지 확인합니다.

aws sts get-caller-identity

AWS CLI 명령은 ARN을 arn:aws:sts::123456789012:assumed-role/example-role/AWSCLI-Session으로 출력해야 합니다. (arn:aws:iam::123456789012:user/Bob을 출력하지 않아야 합니다. 이는 example-role을 위임했는지를 확인합니다.)

3.    다음 명령을 사용하여 Amazon RDS DB 인스턴스에 대한 읽기 전용 액세스 권한만 있고 EC2 인스턴스에는 액세스할 수 없는 IAM 역할을 생성했는지 확인합니다.

aws ec2 describe-instances --query "Reservations[*].Instances[*].[VpcId, InstanceId, ImageId, InstanceType]"
aws rds describe-db-instances --query "DBInstances[*].[DBInstanceIdentifier, DBName, DBInstanceStatus, AvailabilityZone, DBInstanceClass]"

aws ec2 describe-instance 명령을 실행하면 액세스 거부 오류 메시지가 생성되어야 합니다. aws rds describe-db-instance 명령은 Amazon RDS DB 인스턴스를 반환해야 합니다. 이는 IAM 역할에 할당된 권한이 올바르게 작동하는지 확인합니다.

4.    IAM 사용자로 돌아가려면 다음과 같이 환경 변수를 제거합니다.

unset AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY AWS_SESSION_TOKEN
aws sts get-caller-identity

unset 명령은 환경 변수를 제거하고, aws sts get-caller-identity 명령은 IAM 사용자 Bob으로 돌아가는지 확인합니다.

참고: Windows 시스템의 경우 다음과 같이 환경 변수를 빈 문자열로 설정하여 내용을 지웁니다.

SET AWS_ACCESS_KEY_ID=
SET AWS_SECRET_ACCESS_KEY=
SET AWS_SESSION_TOKEN=

관련 정보

역할 용어 및 개념

create-role

AWS 서비스에 대한 권한을 위임할 역할 생성

댓글 없음