

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# CloudShell VPC 환경을 생성하고 사용하는 데 필요한 IAM 권한
<a name="aws-cloudshell-vpc-permissions-1"></a>

CloudShell VPC 환경을 생성하고 사용하려면 IAM 관리자가 VPC 특정 Amazon EC2 권한에 대한 액세스를 활성화해야 합니다. 이 섹션에서는 VPC 환경을 생성하고 사용하는 데 필요한 Amazon EC2 권한을 나열합니다.

 VPC 환경을 생성하려면 역할에 할당된 IAM 정책에 다음 Amazon EC2 권한이 포함되어 있어야 합니다.
+ `ec2:DescribeVpcs`
+ `ec2:DescribeSubnets`
+ `ec2:DescribeSecurityGroups`
+ `ec2:DescribeDhcpOptions`
+ `ec2:DescribeNetworkInterfaces`
+ `ec2:CreateTags`
+ `ec2:CreateNetworkInterface`
+ `ec2:CreateNetworkInterfacePermission`

다음 사항을 포함하는 것이 좋습니다.
+ **ec2:DeleteNetworkInterface**

**참고**  
이 권한은 필수는 아니지만, CloudShell이 생성된 ENI 리소스(CloudShell VPC 환경을 위해 생성된 ENI는 **ManagedByCloudShell** 키로 태그 지정됨)를 정리하는 데 필요합니다. 이 권한이 활성화되지 않은 경우 CloudShell VPC 환경을 사용할 때마다 ENI 리소스를 수동으로 정리해야 합니다.

## VPC에 대한 액세스를 포함하여 전체 CloudShell 액세스 권한을 부여하는 IAM 정책
<a name="cshell-vpc-full-access-example-1"></a>

다음 예제에서는 VPC에 대한 액세스를 포함하여 CloudShell에 대한 전체 권한을 활성화하는 방법을 보여줍니다.

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

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Sid": "AllowCloudShellOperations",
			"Effect": "Allow",
			"Action": [
				"cloudshell:*"
			],
			"Resource": "*"
		},
		{
			"Sid": "AllowDescribeVPC",
			"Effect": "Allow",
			"Action": [
				"ec2:DescribeSubnets",
				"ec2:DescribeSecurityGroups",
				"ec2:DescribeVpcs"
			],
			"Resource": "*"
		},
		{
			"Sid": "AllowInspectVPCConfigurationViaCloudShell",
			"Effect": "Allow",
			"Action": [
				"ec2:DescribeDhcpOptions",
				"ec2:DescribeNetworkInterfaces"
			],
			"Resource": "*",
			"Condition": {
				"ForAnyValue:StringEquals": {
					"aws:CalledVia": "cloudshell.amazonaws.com"
				}
			}
		},
		{
			"Sid": "AllowCreateTagWithCloudShellKeyViaCloudShell",
			"Effect": "Allow",
			"Action": [
				"ec2:CreateTags"
			],
			"Resource": "arn:aws:ec2:*:*:network-interface/*",
			"Condition": {
				"StringEquals": {
					"ec2:CreateAction": "CreateNetworkInterface"
				},
				"ForAnyValue:StringEquals": {
					"aws:TagKeys": "ManagedByCloudShell",
					"aws:CalledVia": "cloudshell.amazonaws.com"
				}
			}
		},
		{
			"Sid": "AllowCreateNetworkInterfaceWithSubnetsAndSGViaCloudShell",
			"Effect": "Allow",
			"Action": [
				"ec2:CreateNetworkInterface"
			],
			"Resource": [
				"arn:aws:ec2:*:*:subnet/*",
				"arn:aws:ec2:*:*:security-group/*"
			],
			"Condition": {
				"ForAnyValue:StringEquals": {
					"aws:CalledVia": "cloudshell.amazonaws.com"
				}
			}
		},
		{
			"Sid": "AllowCreateNetworkInterfaceWithCloudShellTagViaCloudShell",
			"Effect": "Allow",
			"Action": [
				"ec2:CreateNetworkInterface"
			],
			"Resource": "arn:aws:ec2:*:*:network-interface/*",
			"Condition": {
				"ForAnyValue:StringEquals": {
					"aws:TagKeys": "ManagedByCloudShell",
					"aws:CalledVia": "cloudshell.amazonaws.com"
				}
			}
		},
		{
			"Sid": "AllowCreateNetworkInterfacePermissionWithCloudShellTagViaCloudShell",
			"Effect": "Allow",
			"Action": [
				"ec2:CreateNetworkInterfacePermission"
			],
			"Resource": "arn:aws:ec2:*:*:network-interface/*",
			"Condition": {
				"StringEquals": {
					"aws:ResourceTag/ManagedByCloudShell": ""
				},
				"ForAnyValue:StringEquals": {
					"aws:CalledVia": "cloudshell.amazonaws.com"
				}
			}
		},
		{
			"Sid": "AllowDeleteNetworkInterfaceWithCloudShellTagViaCloudShell",
			"Effect": "Allow",
			"Action": [
				"ec2:DeleteNetworkInterface"
			],
			"Resource": "arn:aws:ec2:*:*:network-interface/*",
			"Condition": {
				"StringEquals": {
					"aws:ResourceTag/ManagedByCloudShell": ""
				},
				"ForAnyValue:StringEquals": {
					"aws:CalledVia": "cloudshell.amazonaws.com"
				}
			}
		}
	]
}
```

------

## VPC 환경에 IAM 조건 키 사용
<a name="cloudshell-vpc-condition-keys-1"></a>

VPC 설정에 CloudShell 전용 조건 키를 사용하여 VPC 환경에 대한 추가 권한 제어를 제공할 수 있습니다. 또한 VPC 환경이 사용할 수 있고 사용할 수 없는 서브넷 및 보안 그룹을 지정할 수도 있습니다.

CloudShell은 IAM 정책에서 다음 조건 키를 지원합니다.
+ `CloudShell:VpcIds` - 하나 이상의 VPC 허용 또는 거부
+ `CloudShell:SubnetIds` - 하나 이상의 서브넷 허용 또는 거부
+ `CloudShell:SecurityGroupIds` - 하나 이상의 보안 그룹 허용 또는 거부

**참고**  
퍼블릭 CloudShell 환경에 액세스할 수 있는 사용자의 권한이 수정되어 `cloudshell:createEnvironment` 작업이 제한되는 경우에도 기존 퍼블릭 환경에 액세스할 수 있습니다. 그러나 이 제한으로 IAM 정책을 수정하고 기존 퍼블릭 환경에 대한 액세스를 비활성화하려면 먼저 제한으로 IAM 정책을 업데이트한 다음 계정의 모든 CloudShell 사용자가 CloudShell 웹 사용자 인터페이스(**작업** → **CloudShell 환경 삭제**)를 사용하여 기존 퍼블릭 환경을 수동으로 삭제해야 합니다.

## VPC 설정에 대한 조건 키가 있는 정책의 예제
<a name="vpc-condition-keys-examples-1"></a>

다음 예제에서는 VPC 설정에 조건 키를 사용하는 방법을 보여줍니다. 원하는 제한 사항이 있는 정책 구문을 생성한 후 대상 사용자 또는 역할에 대한 정책 구문을 추가합니다.

### 사용자가 VPC 환경만 생성할 수 있도록 하고 퍼블릭 환경 생성은 거부
<a name="permission-to-create-VPC-env-only-example-1"></a>

사용자가 VPC 환경만 생성할 수 있도록 하려면 다음 예제와 같이 거부 권한을 사용합니다.

```
{
  "Statement": [
    {
      "Sid": "DenyCloudShellNonVpcEnvironments",
      "Action": [
        "cloudshell:CreateEnvironment"
      ],
      "Effect": "Deny",
      "Resource": "*",
      "Condition": {
        "Null": {
          "cloudshell:VpcIds": "true"
        }
      }
    }
  ]
}
```

### 특정 VPC, 서브넷 또는 보안 그룹에 대한 사용자 액세스 거부
<a name="permission-deny-access-example-1"></a>

특정 VPC에 대한 사용자의 액세스를 거부하려면 `StringEquals`를 사용하여 `cloudshell:VpcIds` 조건 값을 확인합니다. 다음 예제에서는 `vpc-1` 및 `vpc-2`에 대한 사용자 액세스를 거부합니다.

특정 VPC에 대한 사용자의 액세스를 거부하려면 `StringEquals`를 사용하여 `cloudshell:SubnetIds` 조건 값을 확인합니다. 다음 예제에서는 `subnet-1` 및 `subnet-2`에 대한 사용자 액세스를 거부합니다.

특정 VPC에 대한 사용자의 액세스를 거부하려면 `StringEquals`를 사용하여 `cloudshell:SecurityGroupIds` 조건 값을 확인합니다. 다음 예제에서는 `sg-1` 및 `sg-2`에 대한 사용자 액세스를 거부합니다.

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "EnforceOutOfSecurityGroups",
      "Action": [
        "cloudshell:CreateEnvironment"
      ],
      "Effect": "Deny",
      "Resource": "*",
      "Condition": {
        "ForAnyValue:StringEquals": {
          "cloudshell:SecurityGroupIds": [
            "sg-1",
            "sg-2"
          ]
        }
      }
    }
  ]
}
```

------

### 사용자가 특정 VPC 구성으로 환경을 생성할 수 있도록 허용
<a name="create-env-with-specific-VPC-conf-1"></a>

특정 VPC에 대한 사용자의 액세스를 허용하려면 `StringEquals`를 사용하여 `cloudshell:VpcIds` 조건 값을 확인합니다. 다음 예제에서는 사용자가 `vpc-1` 및 `vpc-2`에 액세스하도록 허용합니다.

특정 VPC에 대한 사용자의 액세스를 허용하려면 `StringEquals`를 사용하여 `cloudshell:SubnetIds` 조건 값을 확인합니다. 다음 예제에서는 사용자가 `subnet-1` 및 `subnet-2`에 액세스하도록 허용합니다.

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "EnforceStayInSpecificSubnets",
      "Action": [
        "cloudshell:CreateEnvironment"
      ],
      "Effect": "Allow",
      "Resource": "*",
      "Condition": {
        "ForAllValues:StringEquals": {
          "cloudshell:SubnetIds": [
            "subnet-1",
            "subnet-2"
          ]
        }
      }
    }
  ]
}
```

------

특정 VPC에 대한 사용자의 액세스를 허용하려면 `StringEquals`를 사용하여 `cloudshell:SecurityGroupIds` 조건 값을 확인합니다. 다음 예제에서는 사용자가 `sg-1` 및 `sg-2`에 액세스하도록 허용합니다.

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "EnforceStayInSpecificSecurityGroup",
      "Action": [
        "cloudshell:CreateEnvironment"
      ],
      "Effect": "Allow",
      "Resource": "*",
      "Condition": {
        "ForAllValues:StringEquals": {
          "cloudshell:SecurityGroupIds": [
            "sg-1",
            "sg-2"
          ]
        }
      }
    }
  ]
}
```

------