

# Amazon EC2 콘솔에 대한 액세스를 제어하는 정책 예제
<a name="iam-policies-ec2-console"></a>

IAM 정책을 사용하여 Amazon EC2를 사용하는 데 필요한 권한을 사용자에게 부여할 수 있습니다. 단계별 지침은 *IAM 사용 설명서*의 [IAM 정책 생성](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html)을 참조하세요.

콘솔에서는 추가적인 API 작업을 통해 해당 기능을 구현하므로 이러한 정책이 예상과 다르게 작동할 수 있습니다. 예를 들어 `DescribeVolumes` API 작업만 사용할 권한을 갖는 경우 콘솔에서 볼륨을 조회하려고 하면 오류가 발생합니다. 이 섹션에서는 콘솔의 특정 부분을 사용하도록 허용하는 정책을 보여 줍니다. Amazon EC2 콘솔용 정책을 생성하는 방법에 대한 자세한 내용은 AWS 보안 블로그 게시물 [Granting Users Permission to Work in the Amazon EC2 Console](https://aws.amazon.com/blogs/security/granting-users-permission-to-work-in-the-amazon-ec2-console/)을 참조하세요.

다음 예제는 사용자에게 Amazon EC2 사용 권한을 부여하는 데 사용할 수 있는 정책 명령문을 보여줍니다. *user input placeholder*를 사용자의 정보로 바꿉니다. 이러한 정책은 AWS Management Console을 사용하는 요청에 맞게 설계되었습니다. Amazon EC2 콘솔은 단일 리소스를 표시하기 위해 여러 API 작업을 호출할 수 있으며, 사용자가 작업을 시도하고 콘솔에 오류가 표시되기 전까지는 명확하지 않을 수 있습니다. 자세한 내용은 AWS 보안 블로그 게시물 [Granting Users Permission to Work in the Amazon EC2 Console](https://aws.amazon.com/blogs/security/granting-users-permission-to-work-in-the-amazon-ec2-console/)을 참조하세요.

**Topics**
+ [읽기 전용 액세스](#ex-read-only)
+ [EC2 인스턴스 시작 마법사 사용](#ex-launch-wizard)
+ [보안 그룹 작업](#ex-security-groups)
+ [탄력적 IP 주소 작업](#ex-eip)
+ [예약 인스턴스 작업](#ex-reservedinstances)

콘솔에서 작업을 수행하는 데 필요한 API 작업을 파악하려는 경우 AWS CloudTrail 등 호출을 로깅하는 서비스를 사용할 수 있습니다. 정책에서 특정 리소스를 생성하거나 수정할 권한을 부여하지 않는 경우 콘솔에 진단 정보가 포함된 인코딩 메시지가 표시됩니다. AWS STS의 [DecodeAuthorizationMessage](https://docs.aws.amazon.com/STS/latest/APIReference/API_DecodeAuthorizationMessage.html) API 작업이나 AWS CLI의 [decode-authorization-message](https://docs.aws.amazon.com/cli/latest/reference/sts/decode-authorization-message.html) 명령을 사용하여 메시지를 디코딩할 수 있습니다.

## 예: 읽기 전용 액세스
<a name="ex-read-only"></a>

사용자가 Amazon EC2 콘솔에서 모든 리소스를 조회하도록 허용하려면 다음 예제와 같은 정책을 사용합니다. [예: 읽기 전용 액세스](ExamplePolicies_EC2.md#iam-example-read-only). 다른 명령문에서 해당 권한을 부여하지 않는 경우 이러한 리소스에 대해 작업을 수행하거나 새 리소스를 생성할 수는 없습니다.

**인스턴스, AMI 및 스냅샷 조회**

리소스 중 일부에 대한 읽기 전용 액세스를 제공할 수도 있습니다. 이렇게 하려면 `ec2:Describe` API 작업에서 \$1 와일드카드를 구체적인 리소스별 `ec2:Describe` 작업으로 대체합니다. 다음 정책은 사용자가 Amazon EC2 콘솔에서 모든 인스턴스, AMI 및 스냅샷을 조회하도록 허용합니다. `ec2:DescribeTags` 작업에서는 사용자가 퍼블릭 AMI를 조회할 수 있습니다. 콘솔에 퍼블릭 AMI를 표시하려면 태그 지정 정보가 필요하지만 사용자가 프라이빗 AMI만 조회하도록 하려면 이 작업을 제거할 수도 있습니다.

------
#### [ JSON ]

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [{
      "Effect": "Allow",
      "Action": [
         "ec2:DescribeInstances", 
         "ec2:DescribeImages",
         "ec2:DescribeTags", 
         "ec2:DescribeSnapshots"
      ],
      "Resource": "*"
   }
   ]
}
```

------

**참고**  
Amazon EC2 `ec2:Describe*` API 작업은 리소스별 권한을 지원하지 않으므로 사용자가 콘솔에서 조회할 수 있는 리소스를 개별적으로 제어할 수는 없습니다. 따라서 위 명령문의 `Resource` 요소에 \$1 와일드카드가 필요합니다. Amazon EC2 API 작업에 사용할 수 있는 ARN에 대한 자세한 내용은 [Amazon EC2에 사용되는 작업, 리소스 및 조건 키](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonec2.html)를 참조하세요.

**인스턴스 및 CloudWatch 측정치 조회**

다음 정책은 사용자로 하여금 **인스턴스** 페이지의 **모니터링** 탭에 있는 CloudWatch 경보 및 지표뿐만 아니라 Amazon EC2 콘솔의 인스턴스까지도 조회할 수 있도록 허용합니다. Amazon EC2 콘솔에서는 CloudWatch API를 사용하여 경보와 지표를 표시하므로 사용자에게 `cloudwatch:DescribeAlarms`, `cloudwatch:DescribeAlarmsForMetric`, `cloudwatch:ListMetrics`, `cloudwatch:GetMetricStatistics` 및 `cloudwatch:GetMetricData` 작업을 사용하는 권한을 부여해야 합니다.

------
#### [ JSON ]

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [{
      "Effect": "Allow",
      "Action": [
         "ec2:DescribeInstances",
         "ec2:DescribeInstanceTypes",
         "cloudwatch:DescribeAlarms",
         "cloudwatch:DescribeAlarmsForMetric",
         "cloudwatch:ListMetrics",
         "cloudwatch:GetMetricStatistics",
         "cloudwatch:GetMetricData"
      ],
      "Resource": "*"
   }
   ]
}
```

------

## 예: EC2 인스턴스 시작 마법사 사용
<a name="ex-launch-wizard"></a>

Amazon EC2 인스턴스 시작 마법사는 인스턴스를 구성하고 시작하는 옵션이 있는 화면입니다. 사용자가 마법사의 옵션을 사용할 수 있도록 정책에 API 작업 사용 권한이 포함되어야 합니다. 해당 작업 사용 권한이 정책에 포함되지 않으면 마법사의 일부 항목이 제대로 로드되지 않고 사용자가 시작을 완료할 수 없습니다.

**기본 인스턴스 시작 마법사 액세스**

성공적으로 시작을 완료하려면 사용자에게 `ec2:RunInstances` API 작업 및 최소한 다음과 같은 API 작업 사용 권한을 부여해야 합니다.
+ `ec2:DescribeImages`: AMI를 조회하고 선택합니다.
+ `ec2:DescribeInstanceTypes`: 인스턴스 유형을 조회하고 선택합니다.
+ `ec2:DescribeVpcs`: 사용 가능한 네트워크 옵션을 조회합니다.
+ `ec2:DescribeSubnets`: 선택한 VPC에 대한 모든 사용 가능한 서브넷을 조회합니다.
+ `ec2:DescribeSecurityGroups` 또는 `ec2:CreateSecurityGroup`: 기존 보안 그룹을 조회하고 선택하거나 새로 생성합니다.
+ `ec2:DescribeKeyPairs` 또는 `ec2:CreateKeyPair`: 기존 키 페어를 선택하거나 새로 생성합니다.
+ `ec2:AuthorizeSecurityGroupIngress`: 인바운드 규칙을 추가합니다.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ec2:DescribeInstances",
                "ec2:DescribeImages",
                "ec2:DescribeInstanceTypes",
                "ec2:DescribeKeyPairs",
                "ec2:DescribeVpcs",
                "ec2:DescribeSubnets",
                "ec2:DescribeSecurityGroups",
                "ec2:CreateSecurityGroup",
                "ec2:AuthorizeSecurityGroupIngress",
                "ec2:CreateKeyPair"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": "ec2:RunInstances",
            "Resource": "*"
        }
    ]
}
```

------

정책에 API 작업을 추가하여 다음과 같이 사용자에게 더 많은 옵션을 제공할 수 있습니다.
+ `ec2:DescribeAvailabilityZones`: 특정 가용 영역을 조회하고 선택합니다.
+ `ec2:DescribeNetworkInterfaces`: 선택한 서브넷의 기존 네트워크 인터페이스를 조회하고 선택합니다.
+ VPC 보안 그룹에 아웃바운드 규칙을 추가하려면 `ec2:AuthorizeSecurityGroupEgress` API 작업 사용 권한이 부여되어야 합니다. 기존 규칙을 수정 또는 삭제하려면 관련 `ec2:RevokeSecurityGroup*` API 작업 사용 권한이 부여되어야 합니다.
+ `ec2:CreateTags`: 에 의해 생성된 리소스에 태그 지정.`RunInstances` 자세한 내용은 [생성 시 Amazon EC2 리소스 태그 지정에 대한 권한 부여](supported-iam-actions-tagging.md) 섹션을 참조하세요. 이 작업을 사용할 권한이 없는 사용자가 인스턴스 시작 마법사의 태그 지정 페이지에서 태그를 지정하려 시도하는 경우, 시작은 실패합니다.
**중요**  
인스턴스를 시작하는 동안 **Name**(이름)을 지정하면 태그가 생성되고 `ec2:CreateTags` 작업이 필요합니다. 사용자에게 `ec2:CreateTags` 작업을 사용할 수 있는 권한을 부여하면 `aws:ResourceTag` 조건 키를 사용하여 다른 리소스의 사용을 제한하지 못할 수 있으므로 주의해야 합니다. 사용자가 `ec2:CreateTags` 작업을 사용할 수 있는 권한을 부여받으면 리소스의 태그를 변경하여 제한을 우회할 수 있습니다. 자세한 내용은 [속성 기반 액세스를 사용하여 액세스 제어](iam-policies-for-amazon-ec2.md#control-access-with-tags) 섹션을 참조하세요.
+ AMI을 선택하는 데 Systems Manager 파라미터를 사용하려면 정책에 `ssm:DescribeParameters` 및 `ssm:GetParameters`를 추가해야 합니다. `ssm:DescribeParameters`는 사용자에게 Systems Manager 파라미터를 보고 선택할 수 있는 권한을 부여하며, `ssm:GetParameters`는 사용자에게 Systems Manager 파라미터의 값을 가져올 수 있는 권한을 부여합니다. 특정 Systems Manager 파라미터에 대한 액세스를 제한할 수도 있습니다. 자세한 내용은 이 섹션의 뒷부분에 있는 **특정 Systems Manager 파라미터에 대한 액세스 제한**을 참조하세요.

현재 Amazon EC2 `Describe*` API 작업은 리소스별 권한을 지원하지 않으므로 사용자가 인스턴스 시작 마법사에서 조회할 수 있는 리소스를 개별적으로 제한할 수는 없습니다. 그러나 `ec2:RunInstances` API 작업에 리소스별 권한을 적용하여 사용자가 인스턴스를 시작하는 데 사용 가능한 리소스를 제한할 수 있습니다. 사용자가 사용 권한이 없는 옵션을 선택하면 시작에 실패합니다.

**특정 인스턴스 유형, 서브넷 및 리전에 대한 액세스 제한**

다음 정책은 Amazon이 소유한 AMI를 사용하여 `t2.micro` 인스턴스를 시작하되 특정 서브넷(`subnet-1a2b3c4d`)으로만 시작하도록 허용합니다. 사용자는 지정된 리전에서만 시작할 수 있습니다. 사용자가 다른 리전을 선택하거나 인스턴스 시작 마법사에서 다른 인스턴스 유형, AMI 또는 서브넷을 선택하면 시작에 실패합니다.

첫 번째 문은 위 예제에 설명된 대로 사용자가 인스턴스 시작 마법사에서 옵션을 조회할 권한을 부여합니다. 두 번째 명령문은 `ec2:RunInstances` 작업에서 네트워크 인터페이스, 볼륨, 키 페어, 보안 그룹 및 서브넷 리소스를 사용할 권한을 부여합니다. 이 권한은 인스턴스를 VPC로 시작하는 데 필요합니다. `ec2:RunInstances` 작업 사용에 대한 자세한 내용은 [인스턴스 시작(RunInstances)](ExamplePolicies_EC2.md#iam-example-runinstances) 섹션을 참조하세요. 세 번째, 네 번째 명령문은 각각 인스턴스 및 AMI 리소스 사용 권한을 부여하지만 인스턴스가 `t2.micro` 인스턴스이고 AMI가 Amazon 또는 신뢰할 수 있고 검증된 특정 파트너의 소유인 경우로 한정합니다.

------
#### [ JSON ]

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [{
      "Effect": "Allow",
      "Action": [
         "ec2:DescribeInstances",
         "ec2:DescribeImages",
         "ec2:DescribeInstanceTypes",
         "ec2:DescribeKeyPairs", 
         "ec2:CreateKeyPair", 
         "ec2:DescribeVpcs", 
         "ec2:DescribeSubnets", "ec2:DescribeSecurityGroups", 
         "ec2:CreateSecurityGroup", 
         "ec2:AuthorizeSecurityGroupIngress"
	  ],
	  "Resource": "*"
   },
   {
      "Effect": "Allow",
      "Action":"ec2:RunInstances",
      "Resource": [
         "arn:aws:ec2:us-east-2:111122223333:network-interface/*",
         "arn:aws:ec2:us-east-2:111122223333:volume/*",
         "arn:aws:ec2:us-east-2:111122223333:key-pair/*",
         "arn:aws:ec2:us-east-2:111122223333:security-group/*",
         "arn:aws:ec2:us-east-2:111122223333:subnet/subnet-1a2b3c4d"
      ]
   },
   {
      "Effect": "Allow",
      "Action": "ec2:RunInstances",
      "Resource": [
         "arn:aws:ec2:us-east-2:111122223333:instance/*"
      ],
      "Condition": {
         "StringEquals": {
            "ec2:InstanceType": "t2.micro"
         }
      }
   },
   {
      "Effect": "Allow",
      "Action": "ec2:RunInstances",
      "Resource": [ 
            "arn:aws:ec2:us-east-2::image/ami-*"
      ],
      "Condition": {
         "StringEquals": {
            "ec2:Owner": "amazon"
         }
      }
   }
   ]
}
```

------

**특정 Systems Manager 파라미터에 대한 액세스 제한**

다음 정책은 특정 이름의 Systems Manager 파라미터를 사용할 수 있는 액세스 권한을 부여합니다.

첫 번째 문은 인스턴스 시작 마법사에서 AMI를 선택할 때 Systems Manager 파라미터를 볼 수 있는 권한을 사용자에게 부여합니다. 두 번째 문은 사용자에게 `prod-*`라는 이름이 지정된 파라미터만 사용할 수 있는 권한을 부여합니다.

------
#### [ JSON ]

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [{
      "Effect": "Allow",
      "Action": [
         "ssm:DescribeParameters"
      ],
      "Resource": "*"
   },
   {
      "Effect": "Allow",
      "Action": [
         "ssm:GetParameters"
      ],
     "Resource": "arn:aws:ssm:us-east-2:123456123456:parameter/prod-*"
   }
   ]
}
```

------

## 예: 보안 그룹 작업
<a name="ex-security-groups"></a>

**보안 그룹 조회와 규칙의 추가 및 삭제**

다음 정책은 사용자가 Amazon EC2 콘솔에서 보안 그룹을 조회하고 인바운드 및 아웃바운드 규칙을 추가 및 제거하며 `Department=Test` 태그가 있는 기존 보안 그룹에 대한 규칙 설명을 나열하고 수정할 권한을 부여합니다.

첫 번째 명령문에서 `ec2:DescribeTags` 작업은 사용자가 콘솔에서 태그를 조회하도록 허용하므로 사용자가 수정 가능한 보안 그룹을 쉽게 식별할 수 있습니다.

------
#### [ JSON ]

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [{
      "Effect": "Allow",
      "Action": [
         "ec2:DescribeSecurityGroups", 
         "ec2:DescribeSecurityGroupRules", 
         "ec2:DescribeTags"
      ],
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": [
         "ec2:AuthorizeSecurityGroupIngress", 
         "ec2:RevokeSecurityGroupIngress", 
         "ec2:AuthorizeSecurityGroupEgress", 
         "ec2:RevokeSecurityGroupEgress", 
         "ec2:ModifySecurityGroupRules", 
         "ec2:UpdateSecurityGroupRuleDescriptionsIngress", 
         "ec2:UpdateSecurityGroupRuleDescriptionsEgress"
      ],
      "Resource": [
         "arn:aws:ec2:us-east-2:111122223333:security-group/*"
      ],
      "Condition": {
         "StringEquals": {
            "aws:ResourceTag/Department": "Test"
         }
      }
   },
   {
      "Effect": "Allow",
      "Action": [
         "ec2:ModifySecurityGroupRules"
      ],
      "Resource": [
         "arn:aws:ec2:us-east-2:111122223333:security-group-rule/*"
      ]
   }
]}
```

------

**보안 그룹 생성 대화 상자 작업**

사용자가 Amazon EC2 콘솔에서 **보안 그룹 생성** 대화 상자를 사용하도록 허용하는 정책을 생성할 수 있습니다. 이 대화 상자를 사용하려면 최소한 다음과 같은 API 작업 사용 권한을 부여해야 합니다.
+ `ec2:CreateSecurityGroup`: 새 보안 그룹을 생성합니다.
+ `ec2:DescribeVpcs`: **VPC** 목록에서 기존 VPC의 목록을 조회합니다.

이 권한이 있으면 사용자가 새 보안 그룹을 생성할 수 있지만 규칙을 추가할 수는 없습니다. **보안 그룹 생성** 대화 상자에서 규칙 관련 작업을 수행하려면 정책에 다음 API 작업을 추가합니다.
+ `ec2:AuthorizeSecurityGroupIngress`: 인바운드 규칙을 추가합니다.
+ `ec2:AuthorizeSecurityGroupEgress`: VPC 보안 그룹에 아웃바운드 규칙을 추가합니다.
+ `ec2:RevokeSecurityGroupIngress`: 기존 인바운드 규칙을 수정하거나 삭제합니다. 이 권한은 사용자가 콘솔에서 **새로 복사** 기능을 사용하도록 허용하려는 경우에 유용합니다. 이 기능은 **보안 그룹 생성** 대화 상자를 열고 선택한 보안 그룹과 같은 규칙을 미리 입력합니다.
+ `ec2:RevokeSecurityGroupEgress`: VPC 보안 그룹의 아웃바운드 규칙을 수정하거나 삭제합니다. 이 권한은 모든 아웃바운드 트래픽을 허용하는 기본 아웃바운드 규칙을 사용자가 수정 또는 삭제하도록 허용하는 데 유용합니다.
+ `ec2:DeleteSecurityGroup`: 잘못된 규칙을 저장할 수 없도록 합니다. 콘솔에서 먼저 보안 그룹을 만든 후 지정된 규칙을 추가합니다. 규칙이 잘못된 경우 작업이 실패하고 콘솔이 보안 그룹을 삭제하려고 합니다. 사용자는 **보안 그룹 생성** 대화 상자에 남아 있기 때문에 잘못된 규칙을 수정한 후 보안 그룹을 다시 생성해 볼 수 있습니다. 이 API 작업은 필수적이지는 않지만 해당 사용 권한을 부여하지 않으면 사용자가 잘못된 규칙이 포함된 보안 그룹을 생성하려고 할 때 규칙이 없는 보안 그룹이 생성되며, 사용자가 이후에 규칙을 추가해야 합니다.
+ `ec2:UpdateSecurityGroupRuleDescriptionsIngress`: 수신(인바운드) 보안 그룹 규칙에 대한 설명을 추가하거나 업데이트합니다.
+ `ec2:UpdateSecurityGroupRuleDescriptionsEgress`: 발신(아웃바운드) 보안 그룹 규칙에 대한 설명을 추가하거나 업데이트합니다.
+ `ec2:ModifySecurityGroupRules`: 보안 그룹 규칙을 수정하려면
+ `ec2:DescribeSecurityGroupRules`: 보안 그룹 규칙을 나열하려면

다음 정책은 **보안 그룹 생성** 대화 상자를 사용하고 특정 VPC(`vpc-1a2b3c4d`)에 연결된 보안 그룹에 인바운드 및 아웃바운드 규칙을 생성할 권한을 부여합니다. 사용자는 VPC의 보안 그룹을 생성할 수 있지만 규칙을 추가할 수는 없습니다. 마찬가지로 VPC `vpc-1a2b3c4d`에 연결되지 않은 기존 보안 그룹에는 규칙을 추가할 수는 없습니다. 또한 콘솔에서 모든 보안 그룹을 조회할 권한이 부여됩니다. 따라서 사용자가 인바운드 규칙을 추가할 수 있는 보안 그룹을 쉽게 식별할 수 있습니다. 또한 이 정책은 VPC `vpc-1a2b3c4d`에 연결된 보안 그룹을 삭제할 권한을 부여합니다.

------
#### [ JSON ]

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [{
      "Effect": "Allow",
      "Action": [
        "ec2:DescribeSecurityGroups", 
        "ec2:CreateSecurityGroup", 
        "ec2:DescribeVpcs"
      ],
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "ec2:DeleteSecurityGroup", 
        "ec2:AuthorizeSecurityGroupIngress", 
        "ec2:AuthorizeSecurityGroupEgress"
      ],
      "Resource": "arn:aws:ec2:us-east-2:111122223333:security-group/*",
      "Condition":{
         "ArnEquals": {
            "ec2:Vpc": "arn:aws:ec2:us-east-2:111122223333:vpc/vpc-1a2b3c4d"
         }
      }
    }
   ]
}
```

------

## 예: 탄력적 IP 주소 작업
<a name="ex-eip"></a>

사용자가 Amazon EC2 콘솔에서 탄력적 IP 주소를 볼 수 있도록 하려면 사용자에게 `ec2:DescribeAddresses` 작업을 사용할 수 있는 권한을 부여해야 합니다.

사용자에게 탄력적 IP 주소 관련 작업을 허용하려면 정책에 다음 작업을 추가합니다.
+ `ec2:AllocateAddress`: 탄력적 IP 주소를 할당합니다.
+ `ec2:ReleaseAddress`: 탄력적 IP 주소를 해제합니다.
+ `ec2:AssociateAddress`: 인스턴스 또는 네트워크 인터페이스에 탄력적 IP 주소를 연결합니다.
+ `ec2:DescribeNetworkInterfaces` 및 `ec2:DescribeInstances`: **주소 연결** 화면에서 작업합니다. 탄력적 IP 주소를 연결할 수 있는 네트워크 인터페이스나 가용 인스턴스가 화면에 표시됩니다.
+ `ec2:DisassociateAddress`: 인스턴스 또는 네트워크 인터페이스에서 탄력적 IP 주소를 분리합니다.

다음 정책을 통해 사용자는 탄력적 IP 주소를 확인하고 인스턴스에 할당, 연결할 수 있습니다. 사용자는 탄력적 IP 주소를 네트워크 인터페이스에 연결하거나 탄력적 IP 주소 연결을 끊거나 릴리스할 수 없습니다.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ec2:DescribeAddresses",
                "ec2:AllocateAddress",
                "ec2:DescribeInstances",
                "ec2:AssociateAddress"
            ],
            "Resource": "*"
        }
    ]
}
```

------

## 예: 예약 인스턴스 작업
<a name="ex-reservedinstances"></a>

다음 정책은 사용자가 계정의 예약 인스턴스를 보고 수정할 수 있을 뿐만 아니라 AWS Management Console에서 새 예약 인스턴스를 구매할 수 있도록 허용합니다.

이 정책을 통해 사용자는 계정의 모든 예약 인스턴스 및 온디맨드 인스턴스를 볼 수 있습니다. 개별 예약 인스턴스에 대해서는 리소스 수준 권한을 설정할 수 없습니다.

------
#### [ JSON ]

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [{
      "Effect": "Allow",
      "Action": [
         "ec2:DescribeReservedInstances", 
         "ec2:ModifyReservedInstances",
         "ec2:PurchaseReservedInstancesOffering", 
         "ec2:DescribeInstances",
         "ec2:DescribeInstanceTypes",
         "ec2:DescribeAvailabilityZones", 
         "ec2:DescribeReservedInstancesOfferings"
      ],
      "Resource": "*"
   }
   ]
}
```

------

`ec2:DescribeAvailabilityZones` 작업은 Amazon EC2 콘솔이 예약 인스턴스를 구매할 수 있는 가용 영역에 대한 정보를 표시하도록 하는 데 필수적입니다. `ec2:DescribeInstances` 작업은 필수적이지는 않지만 사용자가 계정에서 인스턴스를 보고, 정확한 사양에 맞추기 위해 예약을 구매할 수 있도록 해줍니다.

API 작업을 조정해 사용자 액세스를 제한할 수 있습니다. 예를 들어 `ec2:DescribeInstances`와 `ec2:DescribeAvailabilityZones`를 제거하면 사용자가 읽기 전용 액세스 권한만을 갖게 됩니다.