사용 방법 IAM 역할을 사용하여 에서 실행 중인 응용 프로그램에 대한 권한을 부여합니다. Amazon EC2 인스턴스 - AWS Identity and Access Management

문서의 영문과 번역 사이에 충돌이 있는 경우에는 영문 버전을 따릅니다. 번역 버전은 기계 번역을 사용하여 제공합니다.

사용 방법 IAM 역할을 사용하여 에서 실행 중인 응용 프로그램에 대한 권한을 부여합니다. Amazon EC2 인스턴스

EC2 인스턴스에서 실행되는 애플리케이션에는 AWS API 요청에 AWS 자격 증명이 포함되어 있어야 합니다. 개발자들로 하여금 AWS 자격 증명을 EC2 인스턴스 내부에 직접 저장하고 그 인스턴스의 애플리케이션이 그 자격 증명의 사용을 허용하도록 했을 수도 있습니다. 그러면 개발자는 자격 증명을 관리하고 각 인스턴스에 자격 증명을 안전하게 전달해야 하며, 자격 증명을 교체할 때가 되면 각 EC2 인스턴스를 업데이트해야 할 것입니다. 이처럼 여기에는 많은 작업이 요구됩니다.

이렇게 하는 대신 IAM 역할을 사용하여 EC2 인스턴스에서 실행되는 애플리케이션의 임시 자격 증명을 관리할 수 있고 또 그렇게 해야 합니다. 역할을 사용할 때 EC2 인스턴스에 장기 자격 증명(예: 사용자 이름, 암호 또는 액세스 키)을 배포하지 않아도 됩니다. 그 대신 역할은 애플리케이션에서 다른 AWS 리소스에 호출할 때 사용할 수 있는 임시 권한을 제공합니다. EC2 인스턴스를 시작할 때 IAM 역할을 지정해 인스턴스에 연결합니다. 그러면 이 인스턴스에서 실행되는 애플리케이션은 역할 제공 임시 자격 증명을 사용하여 API 요청에 서명할 수 있습니다.

역할을 사용하여 EC2 인스턴스에서 실행되는 애플리케이션에 권한을 부여하기 위해서는 약간의 추가적인 구성이 필요합니다. EC2 인스턴스에서 실행되는 애플리케이션은 가상화된 운영 체제에 의해 AWS에서 추상화됩니다. 이러한 추가적인 분리로 인해 EC2 인스턴스에 AWS 역할 및 관련 권한을 할당하고 이를 그 애플리케이션도 사용 가능하게 만들려면 추가 절차가 필요합니다. 여기서 추가 절차란 인스턴스에 연결된 인스턴스 프로파일을 생성하는 것입니다. 그러면 인스턴스 프로필은 해당 역할을 포함하게 되며 인스턴스에서 실행되는 애플리케이션에 이 역할의 임시 자격 증명을 제공할 수 있습니다. 이 임시 자격 증명은 애플리케이션의 API 호출에 사용되어 리소스에 액세스하고 이 역할이 지정하는 리소스에 대해서만 액세스를 제한할 수 있습니다. 한 번에 하나의 역할만 EC2 인스턴스에 할당할 수 있으며, 인스턴스의 모든 애플리케이션은 동일한 역할과 권한을 공유한다는 것에 유의하십시오.

이러한 방식으로 역할을 사용하면 여러 가지 장점이 있습니다. 역할 자격 증명은 임시적이고 자동으로 교체되므로 자격 증명을 관리하지 않아도 될 뿐만 아니라 장기적인 보안 위험을 염려하지 않아도 됩니다. 또한, 여러 인스턴스에 대해 역할을 하나만 사용하는 경우 그 역할을 변경할 수 있는데, 변경 사항은 모든 인스턴스에 자동으로 전파됩니다.

참고

일반적으로 역할은 EC2 인스턴스를 시작할 때 할당되지만, 이미 실행 중인 EC2 인스턴스에도 연결될 수 있습니다. 실행 중인 인스턴스에 역할을 연결하는 방법을 알아보려면 Amazon EC2의 IAM 역할 단원을 참조하십시오.

EC2 인스턴스의 역할은 어떻게 작동합니까?

다음 그림에서 개발자는 EC2 인스턴스에서 애플리케이션을 실행합니다. 이 인스턴스에는 photos. 관리자가 Get-pics 역할을 EC2 인스턴스 에 연결합니다. 이 역할에는 지정된 S3 버킷에 대한 읽기 전용 액세스 권한을 부여하는 권한 정책이 포함되어 있습니다. 또한 EC2 인스턴스가 해당 역할을 수임하고 임시 자격 증명을 가져오도록 허용하는 신뢰 정책도 포함되어 있습니다. 애플리케이션이 인스턴스에서 실행되면 역할의 임시 자격 증명을 사용하여 photos 버킷에 액세스할 수 있습니다. 관리자는 개발자 권한을 부여하지 않아도 photos 버킷에 액세스할 수 있고 개발자는 자격 증명을 공유하거나 관리할 필요가 전혀 없습니다.


        AWS 리소스에 액세스하는 EC2 인스턴스의 애플리케이션
  1. 관리자는 IAM을 사용하여 Get-pics 역할을 만듭니다. 역할의 신뢰 정책에서 관리자는 EC2 인스턴스만이 역할을 맡을 수 있도록 지정합니다. 역할의 권한 정책에서 관리자는 photos 버킷에 읽기 전용 권한을 지정합니다.

  2. 개발자는 EC2 인스턴스를 시작하고 이 인스턴스에 Get-pics 역할을 할당합니다.

    참고

    IAM 콘솔을 사용하는 경우, 인스턴스 프로파일은 사용자를 위해 관리되고 대개 사용자가 파악하기 쉽습니다. 그러나 AWS CLI 또는 API를 사용하여 역할 및 EC2 인스턴스를 만들고 관리하는 경우 사용자는 인스턴스 프로파일을 만들고 별도 절차에 따라 여기에 역할을 할당해야 합니다. 그런 다음 인스턴스를 시작할 때 역할 이름이 아닌 인스턴스 프로파일 이름을 지정해야 합니다.

  3. 응용 프로그램이 실행될 때 에서 임시 보안 자격 증명을 가져옵니다. Amazon EC2 인스턴스 메타데이터, 참조: 인스턴스 메타데이터에서 보안 자격 증명 검색. 이러한 자격 증명은 제한된 시간 동안에만 유효한 임시 보안 자격 증명으로 역할을 나타냅니다.

    개발자는 일부 AWS SDK를 통해 임시 보안 자격 증명을 명료하게 관리하는 공급자를 사용할 수 있습니다. (개별 AWS SDK에 대한 설명서에 자격 증명을 관리하기 위해 SDK에서 지원하는 기능이 설명되어 있습니다.)

    또는 애플리케이션이 EC2 인스턴스의 인스턴스 메타데이터에서 임시 자격 증명을 얻을 수 있습니다. 자격 증명과 관련 값은 메타데이터의 iam/security-credentials/role-name 범주(이 경우 iam/security-credentials/Get-pics)에서 구할 수 있습니다. 애플리케이션이 인스턴스 메타데이터에서 자격 증명을 가져오면 자격 증명을 캐시할 수 있습니다.

  4. 애플리케이션은 가져온 임시 자격 증명을 사용하여 photo 버킷에 액세스합니다. Get-pics 역할에 연결된 정책으로 인해 이 애플리케이션에는 읽기 전용 권한만 있습니다.

    인스턴스에서 제공되는 임시 보안 자격 증명은 만료되기 전에 자동으로 교체되므로 항상 유효한 설정을 사용할 수 있습니다. 애플리케이션은 현재 자격 증명이 만료되기 전에 인스턴스 메타데이터에서 새 자격 증명을 가져와야 합니다. AWS SDK에서 자격 증명을 관리하는 경우 애플리케이션은 자격 증명을 갱신하기 위해 로직을 추가로 포함하지 않아도 됩니다. 그러나 애플리케이션이 인스턴스 메타데이터에서 임시 보안 자격 증명을 가져와 캐시한 경우, 현재 자격 증명이 만료되기 전에 한 시간 또는 최소 15분마다 갱신한 자격 증명을 가져와야 합니다. 만료 시간은 iam/security-credentials/role-name 카테고리에 반환되는 정보에 포함되어 있습니다.

역할 사용에 필요한 권한 Amazon EC2

역할을 사용하여 인스턴스를 시작하려면 개발자에게 EC2 인스턴스를 시작할 수 있는 권한과 IAM 역할을 전달할 수 있는 권한이 있어야 합니다.

다음과 같은 샘플 정책은 사용자가 AWS Management 콘솔을 사용하여 역할로 인스턴스를 시작할 수 있도록 허용합니다. 이 정책에는 와일드카드(*)가 포함되어 있어 사용자가 어떤 역할이든 전달하고 어떤 Amazon EC2 작업도 수행할 수 있도록 허용합니다. ListInstanceProfiles 작업을 수행하면 사용자는 AWS 계정에서 제공되는 모든 역할을 볼 수 있습니다.

예 사용 권한을 부여하는 예제 정책 Amazon EC2 콘솔을 사용하여 모든 역할이 포함된 인스턴스를 시작합니다.

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "iam:PassRole", "iam:ListInstanceProfiles", "ec2:*" ], "Resource": "*" }] }

EC2 인스턴스로 전달할 수 있는 역할 제한(PassRole 사용)

PassRole 권한을 사용하여 사용자가 EC2 인스턴스를 시작할 때 이 인스턴스에 전달할 수 있는 역할을 제한할 수 있습니다. 이를 통해 사용자가 자신이 받은 권한 보다 더 많은 권한이 있는 애플리케이션을 실행하지 않도록, 즉 높은 권한을 가져오지 않도록 할 수 있습니다. 예를 들어 사용자 Alice는 EC2 인스턴스를 시작하고 Amazon S3 버킷을 사용할 권한만 갖고 있지만, 그녀가 인스턴스에 전달하는 역할에는 IAM 및 Amazon DynamoDB를 사용할 권한이 있다고 가정해 봅시다. 이 경우 Alice는 인스턴스를 시작하고 여기에 로그인하여 임시 보안 자격 증명을 가져온 다음 그녀에게 권한이 없는 IAM 또는 DynamoDB 작업을 수행할 수도 있습니다.

사용자가 EC2 인스턴스에 전달할 수 있는 역할 중 어떤 것을 제한하려면 PassRole 작업을 허용하는 정책을 생성합니다. 그런 다음 그 정책을 EC2 인스턴스를 시작할 사용자(또는 사용자가 소속된 IAM 그룹)에게 연결합니다. 이 정책의 Resource 요소에서 사용자가 EC2 인스턴스에 전달할 수 있는 역할을 나열합니다. 사용자가 인스턴스를 시작하고 역할을 인스턴스에 연결하면 Amazon EC2에서 사용자가 해당 역할을 전달할 수 있는지 확인합니다. 물론 사용자가 전달할 수 있는 역할에 사용자가 보유하고 있을 것으로 추정되는 권한보다 더 많은 권한이 포함되어 있지 않은지도 확인해야 합니다.

참고

PassRoleRunInstances 또는 ListInstanceProfiles와 동일한 방식의 API 작업이 아닙니다. 역할 ARN이 API에 대한 파라미터로 전달될 때마다 AWS에서 검사하는 권한입니다(또는 사용자 대신 콘솔이 이 기능을 수행). 관리자가 어느 사용자가 어느 역할을 전달할 수 있는지를 제어할 수 있습니다. 이 경우 사용자가 Amazon EC2 인스턴스에 특정 역할을 연결할 수 있습니다.

예 특정 역할의 EC2 인스턴스를 시작할 수 있는 사용자 권한을 부여하는 예제 정책

다음과 같은 샘플 정책은 사용자가 Amazon EC2 API를 사용하여 역할로 인스턴스를 시작할 수 있도록 허용합니다. Resource 요소는 역할의 Amazon 리소스 이름(ARN)을 지정합니다. ARN을 지정함으로써 정책은 사용자에게 Get-pics 역할만을 전달할 권한을 부여합니다. 사용자가 인스턴스를 시작할 때 다른 역할을 지정하려는 경우 작업이 실패합니다. 사용자는 역할을 전달하는지 여부에 관계없이 모든 인스턴스를 실행할 권한이 있습니다.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": "*" }, { "Effect": "Allow", "Action": "iam:PassRole", "Resource": "arn:aws:iam::ACCOUNT-ID-WITHOUT-HYPHENS:role/Get-pics" } ] }

인스턴스 프로필 역할이 다른 계정의 역할로 전환되도록 허용

Amazon EC2 인스턴스에서 실행 중인 애플리케이션에서 다른 계정에 있는 명령을 실행하도록 허용할 수 있습니다. 이를 위해 첫 번째 계정에 있는 EC2 인스턴스 역할이 두 번째 계정의 역할로 전환하도록 허용해야 합니다.

2개의 AWS 계정을 사용하는 경우, 그리고 Amazon EC2 인스턴스에서 실행 중인 특정 애플리케이션에서 두 계정 모두에 있는 AWS CLI 명령을 실행하도록 허용하고자 하는 경우를 가정합니다. 계정에 EC2 인스턴스가 있다고 가정 111111111111. 이 인스턴스에는 abcd 응용 프로그램이 읽기 전용으로 수행할 수 있는 인스턴스 프로파일 역할 Amazon S3 작업 my-bucket-1 동일한 111111111111 계정. 하지만 애플리케이션은 efgh 교차 계정 역할을 수임하여 222222222222 계정의 my-bucket-2 Amazon S3 버킷에 액세스하도록 허용되어야 합니다.

애플리케이션이 my-bucket-1 Amazon S3 버킷에 액세스하도록 허용하려면 abcd EC2 인스턴스 프로파일 역할에 다음과 같은 권한 정책이 있어야 합니다.

계정 111111111111 abcd 역할 권한 정책

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowAccountLevelS3Actions", "Effect": "Allow", "Action": [ "s3:ListAllMyBuckets", "s3:HeadBucket" ], "Resource": "*" }, { "Sid": "AllowListAndReadS3ActionOnMyBucket", "Effect": "Allow", "Action": [ "s3:Get*", "s3:List*" ], "Resource": [ "arn:aws:s3:::my-bucket-1/*", "arn:aws:s3:::my-bucket-1" ] }, { "Sid": "AllowIPToAssumeCrossAccountRole", "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::222222222222:role/efgh" } ] }

abcd 역할은 Amazon EC2 서비스가 역할을 수임하도록 신뢰해야 합니다. 이를 위해 abcd 역할에 다음과 같은 신뢰 정책이 있어야 합니다.

계정 111111111111 abcd 역할 신뢰 정책

{ "Version": "2012-10-17", "Statement": [ { "Sid": "abcdTrustPolicy", "Effect": "Allow", "Action": "sts:AssumeRole", "Principal": {"Service": "ec2.amazonaws.com"} } ] }

efgh 교차 계정 역할이 동일한 222222222222 계정 내에 있는 my-bucket-2 버킷에서 읽기 전용 Amazon S3 작업 수행을 허용한다고 가정합니다. 이를 위해 efgh 교차 계정 역할에 다음과 같은 권한 정책이 있어야 합니다.

계정 222222222222 efgh 역할 권한 정책

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowAccountLevelS3Actions", "Effect": "Allow", "Action": [ "s3:ListAllMyBuckets", "s3:HeadBucket" ], "Resource": "*" }, { "Sid": "AllowListAndReadS3ActionOnMyBucket", "Effect": "Allow", "Action": [ "s3:Get*", "s3:List*" ], "Resource": [ "arn:aws:s3:::my-bucket-2/*", "arn:aws:s3:::my-bucket-2" ] } ] }

efgh 역할은 abcd 인스턴스 프로파일 역할이 이를 수임하도록 신뢰해야 합니다. 이를 위해 efgh 역할에 다음과 같은 신뢰 정책이 있어야 합니다.

계정 222222222222 efgh 역할 신뢰 정책

{ "Version": "2012-10-17", "Statement": [ { "Sid": "efghTrustPolicy", "Effect": "Allow", "Action": "sts:AssumeRole", "Principal": {"AWS": "arn:aws:iam::111111111111:role/abcd"} } ] }

어떻게 시작할 수 있습니까?

역할이 EC2 인스턴스를 사용하는 방식을 이해하려면 IAM 콘솔을 사용하여 역할을 만들고 해당 역할을 사용하는 EC2 인스턴스를 시작한 다음, 실행 중인 인스턴스를 검사해야 합니다. 해당 역할의 임시 자격 증명이 인스턴스에서 사용되는 방식을 보기 위해 인스턴스 메타데이터를 검토할 수 있습니다. 또한, 인스턴스에서 실행되는 애플리케이션이 어떻게 역할을 사용하는지도 알 수 있습니다. 다음 리소스에서 자세히 알아보십시오.

역할 생성 및 EC2 인스턴스의 역할에 대한 자세한 내용은 다음 정보를 참조하십시오.