

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# IAM ポリシーによる AWS CloudShell アクセスと使用状況の管理
<a name="sec-auth-with-identities"></a>

が提供できるアクセス管理リソースを使用すると AWS Identity and Access Management、管理者は IAM ユーザーにアクセス許可を付与できます。これにより、これらのユーザーは環境の機能にアクセスして AWS CloudShell 使用できます。管理者は、ユーザーがシェル環境で実行できるアクションをきめ細かく指定するポリシーを作成することもできます。

管理者がユーザーにアクセス権を付与する最も簡単な方法は、 AWS 管理ポリシーを使用することです。[AWS マネージドポリシー](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#aws-managed-policies)は、 AWSで作成および管理されるスタンドアロンポリシーです。の次の AWS 管理ポリシーを IAM ID にアタッチ AWS CloudShell できます。
+ **AWS CloudShellFullAccess**: AWS CloudShell のすべての機能にフルアクセスできるアクセス許可を付与します。

**AWS CloudShellFullAccess** ポリシーでは、ワイルドカード (\$1) 文字を使用して、IAM アイデンティティ (ユーザー、ロール、またはグループ) に CloudShell および機能へのフルアクセスを許可します。このポリシーの詳細については、「*AWS マネージドポリシーユーザーガイド*」の「[AWS CloudShellFullAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AWSCloudShellFullAccess.html)」を参照してください。

**注記**  
以下の AWS 管理ポリシーを持つ IAM ID は、CloudShell を起動することもできます。ただし、これらのポリシーは広範な許可を付与します。そのため、 IAM ユーザーのジョブロールに必須な場合のみ、これらのポリシーを許可することを推奨します。  
[管理者](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_job-functions.html#jf_administrator): IAM ユーザーにフルアクセスを提供し、 のすべてのサービスとリソースにアクセス許可を委任できるようにします AWS。
[開発者パワーユーザー](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_job-functions.html#jf_developer-power-user): IAM ユーザーがアプリケーション開発タスクを実行し、 AWS アプリケーション開発をサポートするリソースとサービスを作成および設定できるようにします。
マネージドポリシーをアタッチする方法の詳細については、IAM ユーザーガイドの[IAM アイデンティ許可の追加 (コンソール)](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html#add-policies-console)を参照してください。

## カスタムポリシー AWS CloudShell を使用して で許可されるアクションを管理する
<a name="restricting-actions"></a>

IAM ユーザーが CloudShell で実行できるアクションを管理するには、CloudShellPolicy マネージドポリシーをテンプレートとして使用するカスタムポリシーを作成します。または、関連する IAM アイデンティティ (ユーザー、グループ、もしくはロール) に埋め込まれている[インラインポリシー]()を編集します。

例えば、IAM ユーザーに CloudShell へのアクセスを許可する一方で、 AWS マネジメントコンソールへのログインに使用する CloudShell 環境の認証情報の転送を禁止できます。

 

**重要**  
 AWS CloudShell から を起動するには AWS マネジメントコンソール、IAM ユーザーに次のアクションのアクセス許可が必要です。  
`CreateEnvironment`
`CreateSession`
`GetEnvironmentStatus`
`StartEnvironment`
これらのアクションのひとつがアタッチされたポリシーによって明示的に許可されていない場合、CloudShell の起動時に IAM アクセス許可エラーが返されます。


**AWS CloudShell アクセス許可**  

| 名前 | 付与されたアクセス許可の説明 | CloudShell の起動に必要か? | 
| --- | --- | --- | 
|  `cloudshell:CreateEnvironment`  |  CloudShell 環境を作成し、CloudShell セッションの開始時にレイアウトを取得して、バックエンドのウェブアプリケーションから現在のレイアウトを保存します。このアクセス許可は、「[CloudShell の IAM ポリシーの例](#policy-examples)」で説明しているように `*` を `Resource` の値としてのみ期待します。  |  はい  | 
|  `cloudshell:CreateSession`  | から CloudShell 環境に接続します AWS マネジメントコンソール。 |  はい  | 
|  `cloudshell:GetEnvironmentStatus`  |  CloudShell 環境のステータスを読み取ります。  |  はい  | 
|  `cloudshell:DeleteEnvironment`  |  CloudShell 環境を削除します。  |  いいえ  | 
|   `cloudshell:GetFileDownloadUrls`  |  CloudShell ウェブインターフェースを使用して CloudShell 経由でファイルをダウンロードする際に使用する、事前署名された Amazon S3 URL を生成します。これは VPC 環境では使用できません。  |  いいえ  | 
|   `cloudshell:GetFileUploadUrls`  |  CloudShell ウェブインターフェースを使用して CloudShell 経由でファイルをアップロードする際に使用する、事前署名された Amazon S3 URL を生成します。これは VPC 環境では使用できません。  |  いいえ  | 
| `cloudshell:DescribeEnvironments` | 環境について説明します。 | いいえ | 
|  `cloudshell:PutCredentials`  |  へのログインに使用される認証情報を CloudShell に転送 AWS マネジメントコンソール します。  |  いいえ  | 
|   `cloudshell:StartEnvironment`  |  停止している CloudShell 環境を起動します。  |  はい  | 
|   `cloudshell:StopEnvironment`  |  実行中の CloudShell 環境を停止します。  |  いいえ  | 
|  `cloudshell:ApproveCommand`  | 他の AWS Service コンソールから CloudShell に送信されたコマンドを承認します。 | いいえ | 

### CloudShell の IAM ポリシーの例
<a name="policy-examples"></a>

次の例は、CloudShell へのアクセス可能なユーザーを制限するためのポリシーの作成方法を示しています。またこの例は、シェル環境で実行可能なアクションも示しています。

次のポリシーでは、CloudShell とその機能へのアクセスの完全拒否を強制的に実行します。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [{
        "Sid": "DenyCloudShell",
        "Effect": "Deny",
        "Action": [
            "cloudshell:*"
        ],
        "Resource": "*"
    }]
}
```

------

次のポリシーでは、IAM ユーザーが CloudShell にアクセスすることを許可しますが、ファイルのアップロードとダウンロード用の署名済み URL を生成することはブロックします。ユーザーは、例えば `wget` のようなクライアントを使用して、環境に向けておよび環境からファイルを転送することができます。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
        "Sid": "AllowUsingCloudshell",
        "Effect": "Allow",
        "Action": [
            "cloudshell:*"
        ],
        "Resource": "*"
    },
    {
        "Sid": "DenyUploadDownload",
        "Effect": "Deny",
        "Action": [
            "cloudshell:GetFileDownloadUrls",
            "cloudshell:GetFileUploadUrls"
        ],
        "Resource": "*"
    }]
}
```

------

次のポリシーでは、IAM ユーザーに CloudShell へのアクセスを許可します。ただし、このポリシーは、 へのログインに使用した認証情報が CloudShell AWS マネジメントコンソール 環境に転送されないようにします。このポリシーを持つ IAM ユーザーは、CloudShell 内で認証情報を手動で設定する必要があります。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
        "Sid": "AllowUsingCloudshell",
        "Effect": "Allow",
        "Action": [
            "cloudshell:*"
        ],
        "Resource": "*"
    },
    {
        "Sid": "DenyCredentialForwarding",
        "Effect": "Deny",
        "Action": [
            "cloudshell:PutCredentials"
        ],
        "Resource": "*"
    }]
}
```

------

次のポリシーでは、IAM ユーザーに AWS CloudShell 環境の作成を許可します。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [{
        "Sid": "CloudShellUser",
        "Effect": "Allow",
        "Action": [ 
            "cloudshell:CreateEnvironment",
            "cloudshell:CreateSession",
            "cloudshell:GetEnvironmentStatus",
            "cloudshell:StartEnvironment"
        ],
        "Resource": "*"
     }]
}
```

------

## CloudShell の VPC 環境を作成および使用するために必要な IAM アクセス許可
<a name="aws-cloudshell-vpc-permissions"></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 リソースを手動でクリーンアップする必要があります。

### CloudShell へのフルアクセス (VPC へのアクセスを含む) を許可する IAM ポリシー
<a name="cshell-vpc-full-access-example"></a>

次の例は、CloudShell へのフルアクセス (VPC へのアクセスを含む) を許可する方法を示しています。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "AllowCloudShellOperations",
      "Effect": "Allow",
      "Action": [
        "cloudshell:*"
      ],
      "Resource": "*"
    },
    {
      "Sid": "AllowDescribeVPC",
      "Effect": "Allow",
      "Action": [
        "ec2:DescribeDhcpOptions",
        "ec2:DescribeNetworkInterfaces",
        "ec2:DescribeSubnets",
        "ec2:DescribeSecurityGroups",
        "ec2:DescribeVpcs"
      ],
      "Resource": "*"
    },
    {
      "Sid": "AllowCreateTagWithCloudShellKey",
      "Effect": "Allow",
      "Action": [
        "ec2:CreateTags"
      ],
      "Resource": "arn:aws:ec2:*:*:network-interface/*",
      "Condition": {
        "StringEquals": {
          "ec2:CreateAction": "CreateNetworkInterface"
        },
        "ForAnyValue:StringEquals": {
          "aws:TagKeys": "ManagedByCloudShell"
        }
      }
    },
    {
      "Sid": "AllowCreateNetworkInterfaceWithSubnetsAndSG",
      "Effect": "Allow",
      "Action": [
        "ec2:CreateNetworkInterface"
      ],
      "Resource": [
        "arn:aws:ec2:*:*:subnet/*",
        "arn:aws:ec2:*:*:security-group/*"
      ]
    },
    {
      "Sid": "AllowCreateNetworkInterfaceWithCloudShellTag",
      "Effect": "Allow",
      "Action": [
        "ec2:CreateNetworkInterface"
      ],
      "Resource": "arn:aws:ec2:*:*:network-interface/*",
      "Condition": {
        "ForAnyValue:StringEquals": {
          "aws:TagKeys": "ManagedByCloudShell"
        }
      }
    },
    {
      "Sid": "AllowCreateNetworkInterfacePermissionWithCloudShellTag",
      "Effect": "Allow",
      "Action": [
        "ec2:CreateNetworkInterfacePermission"
      ],
      "Resource": "arn:aws:ec2:*:*:network-interface/*",
      "Condition": {
        "StringEquals": {
          "aws:ResourceTag/ManagedByCloudShell": ""
        }
      }
    },
    {
      "Sid": "AllowDeleteNetworkInterfaceWithCloudShellTag",
      "Effect": "Allow",
      "Action": [
        "ec2:DeleteNetworkInterface"
      ],
      "Resource": "arn:aws:ec2:*:*:network-interface/*",
      "Condition": {
        "StringEquals": {
          "aws:ResourceTag/ManagedByCloudShell": ""
        }
      }
    }
  ]
}
```

------

### VPC 環境での IAM 条件キーの使用
<a name="cloudshell-vpc-condition-keys"></a>

VPC 設定で CloudShell 固有の条件キーを使用して、VPC 環境に追加のアクセス許可コントロールを提供できます。また、VPC 環境で使用できるサブネットとセキュリティグループ、および使用できないサブネットとセキュリティグループを指定することもできます。

CloudShell は IAM ポリシーで以下の条件キーをサポートしています。
+ `CloudShell:VpcIds` – 1 つ以上の VPC を許可または拒否する
+ `CloudShell:SubnetIds` – 1 つ以上のサブネットを許可または拒否する
+ `CloudShell:SecurityGroupIds` – 1 つ以上のセキュリティグループを許可または拒否する

**注記**  
ユーザーに CloudShell のパブリック環境へのアクセス権がある場合、ユーザーのアクセス許可を変更して `cloudshell:createEnvironment` アクションに制限を追加しても、ユーザーは依然として既存のパブリック環境にアクセスできます。ただし、この制限を追加して IAM ポリシーを変更し、既存のパブリック環境へのユーザーアクセスを無効にしたい場合は、まず、IAM ポリシーを更新して、この制限を含める必要があります。次に、アカウントのすべての CloudShell ユーザーに、CloudShell ウェブユーザーインターフェイスを使用して既存のパブリック環境を手動で確実に削除してもらいます (**[アクション]** → **[CloudShell 環境を削除]**)。

### VPC 設定の条件キーを使用したポリシーの例
<a name="vpc-condition-keys-examples"></a>

以下の例は、VPC 設定で条件キーを使用する方法を示しています。必要な制限を含むポリシーステートメントを作成したら、このポリシーステートメントをターゲットのユーザーまたはロールに追加します。

#### ユーザーに VPC 環境の作成のみを許可し、パブリック環境の作成を拒否する
<a name="permission-to-create-VPC-env-only-example"></a>

ユーザーに VPC 環境の作成のみを許可するには、次の例に示すように [拒否] アクセス許可を使用します。

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

#### 特定の VPC、サブネット、セキュリティグループへのアクセスをユーザーに拒否する
<a name="permission-deny-access-example"></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"></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"
          ]
        }
      }
    }
  ]
}
```

------

## にアクセスするためのアクセス許可 AWS のサービス
<a name="aws-permissions"></a>

CloudShell は、 AWS マネジメントコンソールへのサインインに使用された IAM 認証情報を使用します。

**注記**  
 へのサインインに使用した IAM 認証情報を使用するには AWS マネジメントコンソール、 アクセス`cloudshell:PutCredentials`許可が必要です。

CloudShell のこの事前認証機能は、 AWS CLIを使用するうえで便利です。ただし、IAM ユーザーには、コマンドラインから呼び出 AWS のサービス される に対する明示的なアクセス許可が必要です。

例えば、IAM ユーザーが Amazon S3 バケットを作成し、ファイルをオブジェクトとしてそこにアップロードする必要があるとします。これらのアクションを明示的に許可するポリシーを作成することができます。IAM コンソールには、JSON 形式のポリシードキュメントを作成する手順を説明するインタラクティブな[ビジュアルエディタ](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create-console.html#access_policies_create-start)が用意されています。ポリシーを作成した後、関連する IAM アイデンティティ (ユーザー、グループ、もしくはロール) にアタッチできます。

マネージドポリシーをアタッチする方法の詳細については、IAM ユーザーガイドの[IAM アイデンティ許可の追加 (コンソール)](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html#add-policies-console)を参照してください。

## CloudShell の Amazon Q CLI 機能へのアクセス許可
<a name="q-cli-permissions-cloudshell"></a>

CloudShell でインライン提案、チャット、翻訳などの Amazon Q CLI 機能を使用するには、必要な IAM アクセス許可があることを確認してください。CloudShell で Amazon Q CLI 機能にアクセスできない場合は、管理者に連絡して必要な IAM アクセス許可を得てください。詳細については、「*Amazon Q Developer ユーザーガイド*」の「[Amazon Q Developer のアイデンティティベースのポリシー例](https://docs.aws.amazon.com/en_us/amazonq/latest/qdeveloper-ug/security_iam_id-based-policy-examples.html)」を参照してください。