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

최종 업데이트 날짜: 2020년 5월 15일

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

해결 방법

다음 지침에 따라 AWS CLI를 사용하여 IAM 역할을 위임합니다. 이 예제에서 이러한 단계를 따른 후 사용자는 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스에 대한 읽기 전용 액세스 권한과 IAM 역할을 위임할 권한이 있습니다.

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

1.    AWS CLI를 사용하여 IAM 사용자를 생성합니다.

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

aws iam create-user --user-name Bob

2.    AWS CLI를 사용하여 Bob에게 권한을 부여하는 IAM 정책을 생성합니다. 선호하는 텍스트 편집기를 사용하여 IAM 정책을 정의하는 JSON 파일을 생성해야 합니다. 이 예제에서는 vim(Linux에서 일반적으로 사용됨)을 사용합니다.

참고: 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": "arn:aws:iam::123456789012:root" },
        "Action": "sts:AssumeRole"
    }
}

또한 특정 IAM 사용자만 IAM 역할을 위임할 수 있도록 신뢰 관계를 제한할 수도 있습니다. arn:aws:iam::123456789012:user/example-username과 비슷한 보안 주체를 지정하여 이를 수행할 수 있습니다. 자세한 내용은 AWS JSON 정책 요소: Principal을 참조하십시오.

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

참고: [기본 리전 이름]에 [AWS 리전]을 지정합니다.

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 역할 위임

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

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.    EC2 인스턴스에 대한 액세스가 아니라, Amazon RDS DB 인스턴스에 대한 읽기 전용 액세스를 보유한 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-instances 명령은 액세스 거부 오류 메시지를 생성하고, aws rds describe-db-instances 명령은 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으로 돌아가는지 확인합니다.

또한 ~/.aws/config 파일에서 프로파일을 생성하여 역할을 사용할 수도 있습니다. 자세한 내용은 AWS CLI에서 IAM 역할 사용을 참조하십시오.


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


결제 또는 기술 지원이 필요합니까?