메뉴
Amazon Elastic Compute Cloud
User Guide for Linux Instances

Amazon EC2의 IAM 역할

애플리케이션은 AWS 자격 증명으로 API 요청에 서명해야 합니다. 따라서 애플리케이션 개발자는 EC2 인스턴스에서 실행되는 인스턴스의 자격 증명을 관리할 전략을 수립해야 합니다. 예를 들어 AWS 자격 증명을 인스턴스에 안전하게 배포하여 다른 사용자로부터 보호하는 한편 해당 인스턴스의 애플리케이션이 자격 증명을 사용하여 요청에 서명하도록 할 수 있습니다. 그러나 각 인스턴스에 자격 증명을 안전하게 배포하기란 쉽지 않으며, 스팟 인스턴스와 같이 AWS에서 자동으로 생성하는 인스턴스 또는 Auto Scaling 그룹의 인스턴스에 대해서는 특히 어렵습니다. 또한 AWS 자격 증명을 교체할 때 각 인스턴스의 자격 증명을 업데이트할 수 있어야 합니다.

애플리케이션이 사용하는 보안 자격 증명을 직접 관리할 필요 없이 인스턴스의 애플리케이션에서 안전하게 API 요청을 전송할 수 있도록 IAM 역할을 설계했습니다. AWS 자격 증명을 생성하고 배포하는 대신 다음과 같이 IAM 역할을 사용하여 API 요청 전송 권한을 위임할 수 있습니다.

  1. IAM 역할을 생성합니다.

  2. 역할을 수행할 수 있는 계정 또는 AWS 서비스를 정의합니다.

  3. 역할을 수행하면서 애플리케이션이 사용할 수 있는 API 작업 및 리소스를 정의합니다.

  4. 인스턴스를 시작할 때 역할을 지정하거나, 실행 중이거나 중지된 인스턴스에 역할을 연결합니다.

  5. 애플리케이션에서 임시 자격 증명 세트를 검색하여 사용하도록 합니다.

예를 들어 IAM 역할을 사용하여 인스턴스에서 실행되며 Amazon S3의 버킷을 사용해야 하는 애플리케이션에 해당 권한을 부여할 수 있습니다. JSON 형식으로 정책을 생성하여 IAM 역할에 권한을 지정할 수 있습니다. 이 방법은 IAM 사용자를 대상으로 정책을 생성할 때와 비슷합니다. 역할을 변경하면 모든 인스턴스에 변경 내용이 전파됩니다.

단일 인스턴스에 여러 IAM 역할을 연결할 수 없지만 여러 인스턴스에 단일 IAM 역할을 연결할 수 있습니다. IAM 역할 생성 및 사용에 대한 자세한 내용은 IAM 사용 설명서에서 역할을 참조하십시오.

IAM 정책에 리소스 수준 권한을 적용하여 사용자가 인스턴스에 IAM 역할을 연결, 교체 또는 분리할 수 있는 권한을 제어할 수 있습니다. 자세한 내용은 Amazon EC2 API 작업에 지원되는 리소스 수준 권한 및 다음 예제: 9: IAM 역할 작업단원을 참조하십시오.

인스턴스 프로파일

Amazon EC2에서는 인스턴스 프로파일을 IAM 역할의 컨테이너로 사용합니다. IAM 콘솔을 사용하여 IAM 역할을 생성하면 인스턴스 프로파일이 자동으로 생성되고 해당 역할과 동일한 이름이 지정됩니다. Amazon EC2 콘솔을 사용하여 IAM 역할로 인스턴스를 시작하거나 인스턴스에 IAM 역할을 연결하는 경우 인스턴스 프로파일 이름 목록을 기반으로 인스턴스를 선택합니다.

AWS CLI, API 또는 AWS SDK를 사용하여 역할을 생성하면 역할과 인스턴스 프로파일이 별개의 작업으로 생성되며 이름은 각각 다를 수 있습니다. AWS CLI, API 또는 AWS SDK를 사용하여 IAM 역할로 인스턴스를 시작하거나 인스턴스에 IAM 역할을 연결하는 경우 인스턴스 프로파일 이름을 지정합니다.

인스턴스 프로파일은 하나의 IAM 역할만 포함할 수 있습니다. 이 한도는 늘릴 수 없습니다.

자세한 내용은 IAM 사용 설명서에서 인스턴스 프로파일을 참조하십시오.

인스턴스 메타데이터에서 보안 자격 증명 검색

인스턴스의 애플리케이션은 인스턴스 메타데이터 항목 iam/security-credentials/role-name에서 역할이 제공하는 보안 자격 증명을 검색합니다. 역할에 연결된 보안 자격 증명을 통해 역할에 정의한 작업 및 리소스에 대한 권한이 애플리케이션에 부여됩니다. 이러한 보안 자격 증명은 임시로 발급되며 자동으로 교체됩니다. 이전 자격 증명이 만료되기 최소 5분 전에 새 자격 증명이 제공됩니다.

주의

IAM 역할과 함께 인스턴스 메타데이터를 사용하는 서비스를 사용하는 경우 서비스에서 사용자 대신 HTTP 호출을 수행할 때 자격 증명이 노출되지 않도록 주의하십시오. 자격 증명이 노출될 수 있는 서비스 유형은 HTTP 프록시, HTML/CSS 검증 서비스, XML 포함을 지원하는 XML 프로세서 등입니다.

다음 명령은 s3access라는 IAM 역할의 보안 자격 증명을 검색합니다.

Copy
curl http://169.254.169.254/latest/meta-data/iam/security-credentials/s3access

다음은 예제 출력입니다.

{
  "Code" : "Success",
  "LastUpdated" : "2012-04-26T16:39:16Z",
  "Type" : "AWS-HMAC",
  "AccessKeyId" : "ASIAIOSFODNN7EXAMPLE",
  "SecretAccessKey" : "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
  "Token" : "token",
  "Expiration" : "2017-05-17T15:09:54Z"
}

인스턴스에서 실행되는 애플리케이션, AWS CLI 및 Windows PowerShell용 도구 명령의 경우, 임시 보안 자격 증명을— 명시적으로 얻지 않아도 됩니다. AWS SDKs, AWS CLI 및 Windows PowerShell용 도구이 EC2 인스턴스 메타데이터 서비스에서 자격 증명을 자동으로 얻어 그것을 사용하기 때문입니다. 임시 보안 자격 증명을 사용하여 인스턴스 외부로 호출하려면(예: IAM 정책 테스트) 액세스 키, 보안 키 및 세션 토큰을 제공해야 합니다. 자세한 내용은 IAM 사용 설명서임시 보안 자격 증명을 사용해 AWS 리소스에 대한 액세스 요청하기를 참조하십시오.

인스턴스 메타데이터에 대한 자세한 내용은 인스턴스 메타데이터 및 사용자 데이터 단원을 참조하십시오.

IAM 사용자에게 IAM 역할을 인스턴스에 전달할 수 있는 권한 부여

IAM 사용자가 IAM 역할로 인스턴스를 시작하거나 기존 인스턴스에 IAM 역할을 연결하거나 교체할 수 있도록 하려면 인스턴스에 역할을 전달할 권한을 부여해야 합니다.

다음 IAM 정책은 사용자에게 IAM 역할로 인스턴스(ec2:RunInstances)를 시작하거나 기존 인스턴스(ec2:AssociateIamInstanceProfileec2:ReplaceIamInstanceProfileAssociation)에 IAM 역할을 연결하거나 교체할 수 있는 권한을 부여합니다.

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

이 정책은 리소스를 "*"로 지정하여 IAM 사용자에게 모든 역할에 대한 액세스 권한을 부여합니다. 그러나 이 경우 해당 역할(기존 역할 또는 이후에 생성할 역할)로 인스턴스를 시작하는 사용자에게 불필요한 권한까지 과도하게 부여해도 무방할지를 고려해야 합니다.

IAM 역할 작업

IAM 역할을 만들고 시작 도중 또는 후에 인스턴스에 연결할 수 있습니다. 인스턴스에 대한 IAM 역할을 교체하거나 분리할 수도 있습니다.

IAM 역할 만들기

특정 역할로 인스턴스를 시작하거나 인스턴스에 연결하려면 우선 IAM 역할을 생성해야 합니다.

IAM 콘솔을 사용하여 IAM 역할을 생성하려면 다음을 수행합니다.

  1. https://console.aws.amazon.com/iam/에서 IAM 콘솔을 엽니다.

  2. 탐색 창에서 [Roles], [Create new role]을 선택합니다.

  3. [Select role type] 페이지에서 [Amazon EC2] 옆의 [Select]를 선택합니다.

  4. [Attach Policy] 페이지에서 인스턴스가 필요로 하는 리소스에 대한 액세스 권한을 부여하는 AWS 관리형 정책을 선택합니다.

  5. [Set role name and review] 페이지에서 역할 이름을 입력하고 [Create role]을 선택합니다.

또는 AWS CLI를 사용하여 IAM 역할을 만들 수 있습니다.

AWS CLI를 사용하여 IAM 역할 및 인스턴스 프로파일 만들기

  • 역할이 Amazon S3 버킷을 사용하도록 허용하는 정책을 갖는 IAM 역할을 생성합니다.

    1. 다음 트러스트 정책을 생성하고 ec2-role-trust-policy.json이라는 텍스트 파일로 저장합니다.

      Copy
      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "ec2.amazonaws.com"}, "Action": "sts:AssumeRole" } ] }
    2. s3access 역할을 만들고 생성한 신뢰 정책을 지정합니다.

      Copy
      aws iam create-role --role-name s3access --assume-role-policy-document file://ec2-role-trust-policy.json { "Role": { "AssumeRolePolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "Service": "ec2.amazonaws.com" } } ] }, "RoleId": "AROAIIZKPBKS2LEXAMPLE", "CreateDate": "2013-12-12T23:46:37.247Z", "RoleName": "s3access", "Path": "/", "Arn": "arn:aws:iam::123456789012:role/s3access" } }
    3. 액세스 정책을 생성하고 ec2-role-access-policy.json이라는 텍스트 파일로 저장합니다. 예를 들어 이 정책은 인스턴스에서 실행되는 애플리케이션에 Amazon S3 관리 권한을 부여합니다.

      Copy
      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["s3:*"], "Resource": ["*"] } ] }
    4. 역할에 액세스 정책을 연결합니다.

      Copy
      aws iam put-role-policy --role-name s3access --policy-name S3-Permissions --policy-document file://ec2-role-access-policy.json
    5. s3access-profile이라는 인스턴스 프로파일을 생성합니다.

      Copy
      aws iam create-instance-profile --instance-profile-name s3access-profile { "InstanceProfile": { "InstanceProfileId": "AIPAJTLBPJLEGREXAMPLE", "Roles": [], "CreateDate": "2013-12-12T23:53:34.093Z", "InstanceProfileName": "s3access-profile", "Path": "/", "Arn": "arn:aws:iam::123456789012:instance-profile/s3access-profile" } }
    6. s3access-profile 인스턴스 프로파일에 s3access 역할을 추가합니다.

      Copy
      aws iam add-role-to-instance-profile --instance-profile-name s3access-profile --role-name s3access

    이러한 명령에 대한 자세한 내용은 AWS Command Line Interface Reference에서 create-role, put-role-policycreate-instance-profile을 참조하십시오.

    또는 다음 Windows PowerShell용 AWS 도구 명령을 사용할 수 있습니다.

IAM 역할로 인스턴스 시작

IAM 역할을 생성한 후 인스턴스를 시작하면서 해당 역할을 연결할 수 있습니다.

중요

IAM 역할을 생성한 후 권한이 전파되기까지 몇 초가 걸릴 수 있습니다. 특정 역할로 인스턴스를 처음 시작하려는 시도가 실패할 경우 몇 초간 기다린 후에 다시 시도해 보십시오. 자세한 내용은 IAM 사용 설명서에서 Troubleshooting Working with Roles를 참조하십시오.

콘솔을 사용하여 IAM 역할로 인스턴스를 시작하려면

  1. https://console.aws.amazon.com/ec2/에서 Amazon EC2 콘솔을 엽니다.

  2. 대시보드에서 Launch Instance를 선택합니다.

  3. AMI와 인스턴스 유형을 선택한 후 [Next: Configure Instance Details]를 선택합니다.

  4. [Configure Instance Details] 페이지의 [IAM role]에서 생성한 IAM 역할을 선택합니다.

    참고

    IAM 역할 생성 시 생성된 인스턴스 프로파일 이름이 [IAM role] 목록에 표시됩니다. 콘솔을 사용하여 IAM 역할을 생성한 경우 인스턴스 프로파일이 자동으로 생성되어 역할과 동일한 이름이 지정된 상태입니다. AWS CLI, API 또는 AWS SDK를 사용하여 IAM 역할을 생성한 경우 인스턴스 프로파일의 이름이 다를 수 있습니다.

  5. 기타 세부 정보를 구성하고 지침에 따라 마법사의 나머지 절차를 완료하거나, [Review and Launch]를 선택하여 기본 설정을 수락하고 [Review Instance Launch] 페이지로 바로 이동합니다.

  6. 설정을 검토한 다음 [Launch]를 선택하여 키 페어를 선택하고 인스턴스를 시작합니다.

  7. 애플리케이션에서 Amazon EC2 API 작업을 사용하는 경우 인스턴스에 제공된 AWS 보안 자격 증명을 검색하고 이를 사용하여 요청에 서명합니다. AWS SDK는 이 작업을 자동으로 수행합니다.

    Copy
    curl http://169.254.169.254/latest/meta-data/iam/security-credentials/role_name

또는 AWS CLI를 사용하여 시작 중에 인스턴스와 역할을 연결할 수 있습니다. 명령에 인스턴스 프로파일을 지정해야 합니다.

AWS CLI를 사용하여 IAM 역할로 인스턴스를 시작하려면 다음을 수행합니다.

  1. run-instances 명령을 사용하여 인스턴스 프로파일을 사용하는 인스턴스를 시작합니다. 다음 예제에서는 인스턴스 프로파일과 함께 인스턴스를 시작하는 방법을 보여 줍니다.

    Copy
    aws ec2 run-instances --image-id ami-11aa22bb --iam-instance-profile Name="s3access-profile" --key-name my-key-pair --security-groups my-security-group --subnet-id subnet-1a2b3c4d

    또는 New-EC2Instance Windows PowerShell용 도구 명령을 사용합니다.

  2. 애플리케이션에서 Amazon EC2 API 작업을 사용하는 경우 인스턴스에 제공된 AWS 보안 자격 증명을 검색하고 이를 사용하여 요청에 서명합니다. AWS SDK는 이 작업을 자동으로 수행합니다.

    Copy
    curl http://169.254.169.254/latest/meta-data/iam/security-credentials/role_name

IAM 역할을 인스턴스에 연결

IAM 역할을 만든 후 실행 중이거나 중지된 인스턴스에 연결할 수 있습니다.

콘솔을 사용하여 IAM 역할을 인스턴스에 연결하기

  1. https://console.aws.amazon.com/ec2/에서 Amazon EC2 콘솔을 엽니다.

  2. 탐색 창에서 Instances를 선택합니다.

  3. 인스턴스를 선택하고 나서 [Actions], [Instance Settings], [Attach/Replace IAM role]을 차례대로 선택합니다.

  4. 인스턴스에 연결할 IAM 역할을 선택한 후 [Apply]를 선택합니다.

AWS CLI를 사용하여 IAM 역할을 인스턴스에 연결하기

  1. 필요한 경우 인스턴스를 설명하여 역할을 연결할 인스턴스의 ID를 가져옵니다.

    Copy
    aws ec2 describe-instances
  2. associate-iam-instance-profile명령을 사용하여 인스턴스 프로파일을 지정하여 인스턴스에 IAM 역할을 연결합니다. 인스턴스 프로파일의 Amazon 리소스 이름(ARN) 또는 이름을 사용할 수 있습니다.

    Copy
    aws ec2 associate-iam-instance-profile --instance-id i-1234567890abcdef0 --iam-instance-profile Name="TestRole-1" { "IamInstanceProfileAssociation": { "InstanceId": "i-1234567890abcdef0", "State": "associating", "AssociationId": "iip-assoc-0dbd8529a48294120", "IamInstanceProfile": { "Id": "AIPAJLNLDX3AMYZNWYYAY", "Arn": "arn:aws:iam::123456789012:instance-profile/TestRole-1" } } }

또는 다음 Windows PowerShell용 도구 명령을 사용합니다.

IAM 역할 분리

실행 중이거나 중지된 인스턴스에서 IAM 역할을 분리할 수 있습니다.

콘솔을 사용하여 인스턴스에서 IAM 역할 분리

  1. https://console.aws.amazon.com/ec2/에서 Amazon EC2 콘솔을 엽니다.

  2. 탐색 창에서 Instances를 선택합니다.

  3. 인스턴스를 선택하고 나서 [Actions], [Instance Settings], [Attach/Replace IAM role]을 차례대로 선택합니다.

  4. [IAM role]에서 [No Role]을 선택합니다. Apply를 선택합니다.

  5. 확인 대화 상자에서 [Yes, Detach]를 선택합니다.

AWS CLI를 사용하여 인스턴스에서 IAM 역할 분리

  1. 필요한 경우 describe-iam-instance-profile-associations를 사용하여 IAM 인스턴스 프로파일 연결을 설명하고 분리할 IAM 인스턴스 프로파일의 연결 ID를 가져옵니다.

    Copy
    aws ec2 describe-iam-instance-profile-associations { "IamInstanceProfileAssociations": [ { "InstanceId": "i-088ce778fbfeb4361", "State": "associated", "AssociationId": "iip-assoc-0044d817db6c0a4ba", "IamInstanceProfile": { "Id": "AIPAJEDNCAA64SSD265D6", "Arn": "arn:aws:iam::123456789012:instance-profile/TestRole-2" } } ] }
  2. disassociate-iam-instance-profile명령을 사용하여 연결 ID를 사용 중인 IAM 인스턴스 프로파일을 분리합니다.

    Copy
    aws ec2 disassociate-iam-instance-profile --association-id iip-assoc-0044d817db6c0a4ba { "IamInstanceProfileAssociation": { "InstanceId": "i-087711ddaf98f9489", "State": "disassociating", "AssociationId": "iip-assoc-0044d817db6c0a4ba", "IamInstanceProfile": { "Id": "AIPAJEDNCAA64SSD265D6", "Arn": "arn:aws:iam::123456789012:instance-profile/TestRole-2" } } }

또는 다음 Windows PowerShell용 도구 명령을 사용합니다.

IAM 역할 교체

실행 중인 인스턴스에 대한 IAM 역할을 교체할 수 있습니다. 예를 들어 인스턴스에서 실행 중인 애플리케이션이 수행한 API 작업이 중단되지 않도록 하려는 경우 등 기존 인스턴스를 먼저 분리하지 않고도 인스턴스에 대한 IAM 역할을 변경하고자 할 때 이 작업을 수행할 수 있습니다.

콘솔을 사용하여 인스턴스에 대한 IAM 역할 교체

  1. https://console.aws.amazon.com/ec2/에서 Amazon EC2 콘솔을 엽니다.

  2. 탐색 창에서 Instances를 선택합니다.

  3. 인스턴스를 선택하고 나서 [Actions], [Instance Settings], [Attach/Replace IAM role]을 차례대로 선택합니다.

  4. 인스턴스에 연결할 IAM 역할을 선택한 후 [Apply]를 선택합니다.

AWS CLI를 사용하여 인스턴스에 대한 IAM 역할 교체

  1. 필요한 경우 IAM 인스턴스 프로파일 연결을 설명하여 교체할 IAM 인스턴스 프로파일의 연결 ID를 가져옵니다.

    Copy
    aws ec2 describe-iam-instance-profile-associations
  2. replace-iam-instance-profile-association 명령을 사용하여 기존 인스턴스 프로파일에 대한 연결 ID와 교체할 인스턴스 프로파일의 ARN 또는 이름을 지정하여 IAM 인스턴스 프로파일을 교체합니다.

    Copy
    aws ec2 replace-iam-instance-profile-association --association-id iip-assoc-0044d817db6c0a4ba --iam-instance-profile Name="TestRole-2" { "IamInstanceProfileAssociation": { "InstanceId": "i-087711ddaf98f9489", "State": "associating", "AssociationId": "iip-assoc-09654be48e33b91e0", "IamInstanceProfile": { "Id": "AIPAJCJEDKX7QYHWYK7GS", "Arn": "arn:aws:iam::123456789012:instance-profile/TestRole-2" } } }

또는 다음 Windows PowerShell용 도구 명령을 사용합니다.