AWS CLI를 사용하여 IAM 역할을 맡으려면 어떻게 해야 하나요?

6분 분량
0

AWS Command Line Interface(AWS CLI)를 사용하여 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 정책의 ARN(Amazon 리소스 이름) 을 비롯한 여러 정보를 출력합니다.

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 ID로 하여금 해당 역할을 맡도록 허용할 수 있습니다. 자세한 내용은 IAM 사용자에게 권한을 위임할 수 있는 역할 생성을 참조하세요.

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

aws iam create-role 명령은 이전 섹션에서 생성한 JSON 파일에 따라 IAM 역할을 생성하고 신뢰 관계를 정의합니다. 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 사용자에게 EC2 인스턴스에 대한 읽기 전용 액세스 권한이 있고 Amazon RDS DB 인스턴스에 대한 액세스 권한이 없음을 확인합니다.

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 인스턴스가 표시됩니다. Bob은 Amazon RDS에 대한 액세스 권한이 없으므로 aws rds describe-db-instances 명령이 액세스 거부 오류 메시지를 생성해야 합니다.

IAM 역할 수임

다음 중 하나를 수행하세요.

~/.aws/config 파일에 프로필을 생성하여 IAM 역할을 생성합니다. 자세한 내용은 ](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-role.html)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-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으로 돌아왔는지 확인합니다.

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

SET AWS_ACCESS_KEY_ID=
SET AWS_SECRET_ACCESS_KEY=
SET AWS_SESSION_TOKEN=

관련 정보

역할 용어 및 개념

역할 생성

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