Amazon EC2용 ID 기반 정책

Amazon EC2용 ID 기반 정책

기본적으로 사용자는 Amazon EC2 리소스를 만들거나 수정하거나 Amazon EC2 API, Amazon EC2 콘솔, CLI를 사용해 작업을 수행할 수 있는 권한이 없어요. 사용자가 리소스를 만들고 수정하며 작업을 수행하도록 허용하려면, 사용자가 필요로 할 특정 리소스와 API 작업을 사용할 수 있는 권한을 부여하는 IAM 정책을 만든 다음, 그 정책을 권한이 필요한 사용자, 그룹, IAM 역할에 연결해야 합니다.

출처: 문서

본문

정책을 사용자, 사용자 그룹, 또는 역할에 연결하면 지정된 리소스에서 지정된 작업을 수행할 권한을 사용자에게 허용하거나 거부합니다. IAM 정책에 대한 더 일반적인 정보는 IAM User Guide의 Policies and permissions in IAM 문서를 참고하세요. IAM 정책 관리 및 생성에 대한 자세한 내용은 Manage IAM policies 문서를 참고하세요.

IAM 정책은 하나 이상의 Amazon EC2 작업을 사용할 권한을 부여하거나 거부해야 합니다. 또한 작업에서 사용할 수 있는 리소스(모든 리소스이거나 일부 경우 특정 리소스)를 지정해야 합니다. 정책에는 리소스에 적용하는 조건(conditions)을 포함할 수도 있습니다.

시작하려면 Amazon EC2용 AWS 관리형 정책이 요구사항을 충족하는지 확인할 수 있어요. 그렇지 않으면 자체 커스텀 정책을 만들 수 있습니다. 자세한 내용은 AWS managed policies for Amazon EC2 문서를 참고하세요.

목차 (Contents)

  • Policy syntax
  • Actions for Amazon EC2
  • Supported resource-level permissions for Amazon EC2 API actions
  • Amazon Resource Names (ARNs) for Amazon EC2
  • Condition keys for Amazon EC2
  • Control access using attribute-based access
  • Grant permissions to users, groups, and roles
  • Check that users have the required permissions

정책 구문 (Policy syntax)

IAM 정책은 하나 이상의 명령문(statement)으로 구성된 JSON 문서입니다. 각 명령문은 다음과 같이 구성됩니다.

{
  "Statement":[{
    "Effect":"effect",
    "Action":"action",
    "Resource":"arn",
    "Condition":{
      "condition":{
        "key":"value"
        }
      }
    }
  ]
}

명령문을 구성하는 다양한 요소가 있습니다.

  • Effect — Allow 또는 Deny가 될 수 있어요. 기본적으로 사용자는 리소스와 API 작업을 사용할 권한이 없으므로 모든 요청이 거부됩니다. 명시적 허용은 기본값을 덮어씁니다. 명시적 거부는 모든 허용을 덮어씁니다.
  • Action — 권한을 부여하거나 거부하는 특정 API 작업이에요. 작업 지정에 대해 알아보려면 Actions for Amazon EC2를 참고하세요.
  • Resource — 작업의 영향을 받는 리소스예요. 일부 Amazon EC2 API 작업은 작업으로 만들거나 수정할 수 있는 특정 리소스를 정책에 포함시킬 수 있게 해줍니다. Amazon Resource Name(ARN)을 사용하거나 와일드카드(*)를 사용해 명령문이 모든 리소스에 적용됨을 나타내 리소스를 지정합니다. 자세한 내용은 Supported resource-level permissions for Amazon EC2 API actions 문서를 참고하세요.
  • Condition — 선택 사항입니다. 정책이 적용되는 시기를 제어하는 데 사용할 수 있어요. Amazon EC2에 대한 조건 지정에 대한 자세한 내용은 Condition keys for Amazon EC2 문서를 참고하세요.

정책 요구사항에 대한 자세한 내용은 IAM User Guide의 IAM JSON policy reference 문서를 참고하세요. Amazon EC2용 IAM 정책 명령문 예시는 Example policies to control access the Amazon EC2 API 문서를 참고하세요.

Amazon EC2 작업 (Actions for Amazon EC2)

IAM 정책 명령문에서 IAM을 지원하는 모든 서비스의 API 작업을 지정할 수 있어요. Amazon EC2의 경우 API 작업 이름과 함께 ec2: 접두사를 사용합니다. 예: ec2:RunInstances, ec2:CreateImage.

단일 명령문에서 여러 작업을 지정하려면 다음과 같이 쉼표로 구분합니다.

"Action": ["ec2:action1", "ec2:action2"]

와일드카드를 사용해 여러 작업을 지정할 수도 있어요. 예를 들어 다음과 같이 이름이 "Describe"로 시작하는 모든 작업을 지정할 수 있습니다.

"Action": "ec2:Describe*"

참고: 현재 Amazon EC2 Describe* API 작업은 리소스 수준 권한을 지원하지 않습니다. Amazon EC2의 리소스 수준 권한에 대한 자세한 내용은 Identity-based policies for Amazon EC2 문서를 참고하세요.

다음과 같이 * 와일드카드를 사용해 모든 Amazon EC2 API 작업을 지정할 수 있어요.

"Action": "ec2:*"

Amazon EC2 작업 목록은 Service Authorization Reference의 Actions defined by Amazon EC2 문서를 참고하세요.

Amazon EC2 API 작업에 대한 지원되는 리소스 수준 권한

**리소스 수준 권한(resource-level permissions)**은 사용자가 작업을 수행할 수 있는 리소스를 지정할 수 있는 능력을 말해요. Amazon EC2는 리소스 수준 권한을 부분적으로 지원합니다. 즉, 특정 Amazon EC2 작업의 경우 충족해야 하는 조건 또는 사용자가 사용할 수 있는 특정 리소스를 기준으로 사용자가 그 작업을 사용할 수 있는 시기를 제어할 수 있어요. 예를 들어 사용자에게 특정 유형의 인스턴스만, 특정 AMI만 사용해 인스턴스를 실행할 권한을 부여할 수 있습니다.

IAM 정책 명령문에서 리소스를 지정하려면 해당 **Amazon Resource Name(ARN)**을 사용합니다. ARN 값 지정에 대한 자세한 내용은 Amazon Resource Names (ARNs) for Amazon EC2 문서를 참고하세요. API 작업이 개별 ARN을 지원하지 않으면 와일드카드(*)를 사용해 모든 리소스가 작업의 영향을 받을 수 있음을 지정해야 합니다.

리소스 수준 권한을 지원하는 Amazon EC2 API 작업과 정책에서 사용할 수 있는 ARN 및 조건 키를 식별하는 표는 Actions, resources, and condition keys for Amazon EC2 문서를 참고하세요.

Amazon EC2 API 작업에 사용하는 IAM 정책에 태그 기반 리소스 수준 권한을 적용할 수 있음을 기억하세요. 이렇게 하면 사용자가 만들거나 수정하거나 사용할 수 있는 리소스를 더 잘 제어할 수 있어요. 자세한 내용은 Grant permission to tag Amazon EC2 resources during creation 문서를 참고하세요.

Amazon EC2의 Amazon Resource Names (ARNs)

각 IAM 정책 명령문은 ARN으로 지정하는 리소스에 적용됩니다.

ARN의 일반적인 구문은 다음과 같습니다.

arn:aws:[service]:[region]:[account-id]:resourceType/resourcePath
  • service — 서비스(예: ec2).
  • region — 리소스의 리전(예: us-east-1).
  • account-id — 하이픈 없는 AWS 계정 ID(예: 123456789012).
  • resourceType — 리소스 유형(예: instance).
  • resourcePath — 리소스를 식별하는 경로. 경로에 * 와일드카드를 사용할 수 있어요.

예를 들어 명령문에서 특정 인스턴스(i-1234567890abcdef0)를 ARN을 사용해 다음과 같이 나타낼 수 있습니다.

"Resource": "arn:aws:ec2:us-east-1:123456789012:instance/i-1234567890abcdef0"

* 와일드카드를 사용해 특정 계정에 속한 모든 인스턴스를 다음과 같이 지정할 수 있어요.

"Resource": "arn:aws:ec2:us-east-1:123456789012:instance/*"

* 와일드카드를 사용해 특정 계정에 속한 모든 Amazon EC2 리소스를 다음과 같이 지정할 수도 있어요.

"Resource": "arn:aws:ec2:us-east-1:123456789012:*"

모든 리소스를 지정하려면, 또는 특정 API 작업이 ARN을 지원하지 않으면 Resource 요소에서 * 와일드카드를 다음과 같이 사용합니다.

"Resource": "*"

많은 Amazon EC2 API 작업은 여러 리소스를 포함합니다. 예를 들어 AttachVolume은 Amazon EBS 볼륨을 인스턴스에 연결하므로, 사용자는 볼륨과 인스턴스를 사용할 권한이 있어야 해요. 단일 명령문에서 여러 리소스를 지정하려면 다음과 같이 ARN을 쉼표로 구분합니다.

"Resource": ["arn1", "arn2"]

Amazon EC2 리소스의 ARN 목록은 Resource types defined by Amazon EC2 문서를 참고하세요.

Amazon EC2 조건 키 (Condition keys for Amazon EC2)

정책 명령문에서 선택적으로 정책이 적용되는 시기를 제어하는 조건을 지정할 수 있어요. 각 조건은 하나 이상의 키-값 쌍을 포함합니다. 조건 키는 대소문자를 구분하지 않습니다. AWS는 AWS 전역 조건 키와 추가적인 서비스별 조건 키를 정의했습니다.

Amazon EC2의 서비스별 조건 키 목록은 Condition keys for Amazon EC2 문서를 참고하세요. Amazon EC2는 AWS 전역 조건 키도 구현합니다. 자세한 내용은 IAM User Guide의 Information available in all requests 문서를 참고하세요.

모든 Amazon EC2 작업은 aws:RequestedRegion 및 ec2:Region 조건 키를 지원합니다. 자세한 내용은 Example: Restrict access to a specific Region 문서를 참고하세요.

IAM 정책에서 조건 키를 사용하려면 Condition 명령문을 사용합니다. 예를 들어 다음 정책은 사용자에게 모든 보안 그룹에 대한 인바운드 및 아웃바운드 규칙을 추가하고 제거할 권한을 부여합니다. ec2:Vpc 조건 키를 사용해 이 작업이 특정 VPC의 보안 그룹에서만 수행될 수 있음을 지정합니다.

{
"Version":"2012-10-17",
  "Statement":[{
    "Effect":"Allow",
    "Action": [
       "ec2:AuthorizeSecurityGroupIngress",
       "ec2:AuthorizeSecurityGroupEgress",
       "ec2:RevokeSecurityGroupIngress",
       "ec2:RevokeSecurityGroupEgress"],
     "Resource": "arn:aws:ec2:us-east-1:111122223333:security-group/*",
      "Condition": {
        "StringEquals": {
          "ec2:Vpc": "arn:aws:ec2:us-east-1:111122223333:vpc/vpc-11223344556677889"
        }
      }
    }
  ]
}

여러 조건을 지정하거나 단일 조건에 여러 키를 지정하면 논리 AND 작업으로 평가합니다. 단일 조건에 한 키의 여러 값을 지정하면 논리 OR 작업으로 조건을 평가합니다. 권한이 부여되려면 모든 조건이 충족되어야 해요.

조건을 지정할 때 자리표시자(placeholder)도 사용할 수 있어요. 자세한 내용은 IAM User Guide의 IAM policy elements: Variables and tags 문서를 참고하세요.

중요: 많은 조건 키가 리소스에 특정하며, 일부 API 작업은 여러 리소스를 사용합니다. 조건 키로 정책을 작성할 때는 조건 키가 적용되는 리소스를 지정하도록 명령문의 Resource 요소를 사용하세요. 그렇지 않으면 조건 키가 적용되지 않는 리소스에 대해 조건 검사가 실패하기 때문에 정책이 사용자가 작업을 전혀 수행하지 못하게 할 수 있어요. 리소스를 지정하고 싶지 않거나 정책의 Action 요소에 여러 API 작업을 포함했다면, 조건 키가 사용하지 않는 리소스에서 무시되도록 ...IfExists 조건 유형을 사용해야 합니다. 자세한 내용은 IAM User Guide의 ...IfExists Conditions 문서를 참고하세요.

조건 키 (Condition keys)

  • ec2:Attribute 조건 키
  • ec2:ResourceID 조건 키
  • ec2:SourceInstanceARN 조건 키

ec2:Attribute 조건 키

ec2:Attribute 조건 키는 리소스의 속성으로 접근을 필터링하는 조건에 사용할 수 있어요.

이 조건 키는 기본 데이터 유형(문자열이나 정수 등)의 속성이나, Value 속성만 포함하는 복잡한 AttributeValue 객체(예: ModifyImageAttribute API 작업의 Description 또는 ImdsSupport 객체)만 지원합니다. ModifyImageAttribute의 LaunchPermission 객체처럼 여러 속성을 포함하는 복잡한 객체에는 이 조건 키를 사용할 수 없습니다.

예를 들어 다음 정책은 ec2:Attribute/Description 조건 키를 사용해 ModifyImageAttribute API 작업의 복잡한 Description 객체로 접근을 필터링합니다. 이 조건 키는 이미지의 설명을 Production 또는 Development로 수정하는 요청만 허용해요.

{
  "Version":"2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "ec2:ModifyImageAttribute",
      "Resource": "arn:aws:ec2:us-east-1::image/ami-*",
      "Condition": {
        "StringEquals": {
          "ec2:Attribute/Description": [
            "Production",
            "Development"
          ]
        }
      }
    }
  ]
}

다음 예시 정책은 ec2:Attribute 조건 키를 사용해 ModifyImageAttribute API 작업의 기본(primitive) Attribute 속성으로 접근을 필터링합니다. 이 조건 키는 이미지의 설명을 수정하려는 모든 요청을 거부해요.

{
  "Version":"2012-10-17",
  "Statement": [
    {
      "Effect": "Deny",
      "Action": "ec2:ModifyImageAttribute",
      "Resource": "arn:aws:ec2:us-east-1::image/ami-*",
      "Condition": {
        "StringEquals": {
          "ec2:Attribute": "Description"
        }
      }
    }
  ]
}

ec2:ResourceID 조건 키

지정된 API 작업과 함께 다음 ec2:ResourceID 조건 키를 사용하면, 조건 키 값이 API 작업으로 생성되는 결과 리소스를 지정하는 데 사용됩니다. ec2:ResourceID 조건 키는 API 요청에 지정된 소스 리소스를 지정하는 데 사용할 수 없습니다. 다음 ec2:ResourceID 조건 키 중 하나를 지정된 API와 함께 사용한다면 **항상 와일드카드(*)**를 지정해야 합니다. 다른 값을 지정하면 조건은 런타임 중 항상 *로 해석됩니다. 예를 들어 CopyImage API와 함께 ec2:ImageId 조건 키를 사용하려면 조건 키를 다음과 같이 지정해야 합니다.

{
  "Version":"2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "ec2:CopyImage",
      "Resource": "arn:aws:ec2:us-east-1::image/ami-*",
      "Condition": {
        "StringEquals": {
          "ec2:ImageID": "*"
        }
      }
    }
  ]
}

다음 API 작업과 함께 이러한 조건 키를 사용하는 것을 피할 것을 권장합니다.

  • ec2:DhcpOptionsID – CreateDhcpOptions
  • ec2:ImageID – CopyImage, CreateImage, ImportImage, RegisterImage
  • ec2:InstanceID – RunInstances 및 ImportInstance
  • ec2:InternetGatewayID – CreateInternetGateway
  • ec2:NetworkAclID – CreateNetworkAcl
  • ec2:NetworkInterfaceID – CreateNetworkInterface
  • ec2:PlacementGroupName – CreatePlacementGroup
  • ec2:RouteTableID – CreateRouteTable
  • ec2:SecurityGroupID – CreateSecurityGroup
  • ec2:SnapshotID – CopySnapshot, CreateSnapshot, CreateSnapshots, ImportSnapshots
  • ec2:SubnetID – CreateSubnet
  • ec2:VolumeID – CreateVolume 및 ImportVolume
  • ec2:VpcID – CreateVpc
  • ec2:VpcPeeringConnectionID – CreateVpcPeeringConnection

특정 리소스 ID로 접근을 필터링하려면 다음과 같이 Resource 정책 요소를 사용할 것을 권장합니다.

{
  "Version":"2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "ec2:CopyImage",
      "Resource": "arn:aws:ec2:us-east-1::image/ami-01234567890abcdef"
    }
  ]
}

ec2:SourceInstanceARN 조건 키

ec2:SourceInstanceARN을 사용해 요청이 이루어지는 인스턴스의 ARN을 지정하세요. 이는 AWS 전역 조건 키이므로 Amazon EC2 외의 서비스와도 사용할 수 있어요. 정책 예시는 Example: Allow a specific instance to view resources in other AWS services 문서를 참고하세요.

속성 기반 접근(ABAC)을 사용한 접근 제어

사용자가 EC2 리소스를 사용할 권한을 부여하는 IAM 정책을 만들 때, 정책의 Condition 요소에 태그 정보를 포함시켜 태그를 기반으로 접근을 제어할 수 있어요. 이를 **속성 기반 접근 제어(ABAC, attribute-based access control)**라고 합니다. ABAC는 사용자가 수정하거나 사용하거나 삭제할 수 있는 리소스를 더 잘 제어할 수 있게 해줍니다. 자세한 내용은 What is ABAC for AWS? 문서를 참고하세요.

예를 들어 사용자가 인스턴스를 종료할 수 있지만, 인스턴스에 environment=production 태그가 있으면 그 작업을 거부하는 정책을 만들 수 있어요. 이렇게 하려면 aws:ResourceTag 조건 키를 사용해 리소스에 연결된 태그를 기반으로 리소스에 대한 접근을 허용하거나 거부합니다.

"StringEquals": { "aws:ResourceTag/environment": "production" }

Amazon EC2 API 작업이 aws:ResourceTag 조건 키를 사용한 접근 제어를 지원하는지 알아보려면 Actions, resources, and condition keys for Amazon EC2 문서를 참고하세요. Describe 작업은 리소스 수준 권한을 지원하지 않으므로 조건 없이 별도의 명령문에서 지정해야 합니다.

예시 IAM 정책은 Example policies to control access the Amazon EC2 API 문서를 참고하세요.

태그를 기반으로 리소스에 대한 접근을 허용하거나 거부한다면, 사용자가 같은 리소스에 그 태그를 추가하거나 제거하는 능력을 명시적으로 거부하는 것을 고려해야 해요. 그렇지 않으면 사용자가 태그를 수정해 제한을 우회하고 리소스에 접근할 수 있습니다.

사용자, 그룹, 역할에 권한 부여하기 (Grant permissions to users, groups, and roles)

접근을 제공하려면 사용자, 그룹, 또는 역할에 권한을 추가하세요.

  • AWS IAM Identity Center의 사용자 및 그룹: 권한 집합(permission set)을 만드세요. AWS IAM Identity Center User Guide의 Create a permission set 지침을 따르세요.
  • ID 공급자를 통해 IAM에서 관리되는 사용자: ID 페더레이션용 역할을 만드세요. IAM User Guide의 Create a role for a third-party identity provider (federation) 지침을 따르세요.
  • IAM 사용자:
    • 사용자가 수임할 수 있는 역할을 만드세요. IAM User Guide의 Create a role for an IAM user 지침을 따르세요.
    • (권장하지 않음) 정책을 사용자에게 직접 연결하거나 사용자를 사용자 그룹에 추가하세요. IAM User Guide의 Adding permissions to a user (console) 지침을 따르세요.

사용자에게 필요한 권한이 있는지 확인하기 (Check that users have the required permissions)

IAM 정책을 만든 후에는 정책을 프로덕션에 배포하기 전에 사용자가 필요로 하는 특정 API 작업과 리소스를 사용할 권한을 정책이 부여하는지 확인하는 것을 권장합니다.

먼저 테스트용 사용자를 만든 다음, 만든 IAM 정책을 테스트 사용자에게 연결하세요. 그런 다음 테스트 사용자로 요청을 합니다.

테스트하는 Amazon EC2 작업이 리소스를 만들거나 수정한다면 DryRun 파라미터(또는 AWS CLI 명령에 --dry-run 옵션)를 사용해 요청해야 해요. 이 경우 호출은 권한 부여 검사를 완료하지만 작업은 완료하지 않습니다. 예를 들어 사용자가 특정 인스턴스를 실제로 종료하지 않고 종료할 권한이 있는지 확인할 수 있어요. 테스트 사용자에게 필요한 권한이 있으면 요청은 DryRunOperation을 반환하고, 그렇지 않으면 UnauthorizedOperation을 반환합니다.

정책이 기대한 권한을 사용자에게 부여하지 않거나 과도하게 허용한다면, 필요에 따라 정책을 조정하고 원하는 결과를 얻을 때까지 다시 테스트하세요.

중요: 정책 변경이 적용되어 효과가 나타나기까지 몇 분이 걸릴 수 있습니다. 따라서 정책 업데이트를 테스트하기 전에 5분을 기다릴 것을 권장합니다.

권한 부여 검사가 실패하면 요청은 진단 정보가 포함된 인코딩된 메시지를 반환합니다. DecodeAuthorizationMessage 작업을 사용해 메시지를 디코딩할 수 있어요. 자세한 내용은 AWS Security Token Service API Reference의 DecodeAuthorizationMessage 및 디코딩 decode-authorization-message 문서를 참고하세요.

더 알아보기 (Learn more)