IMPポリシー内でのアクセスおよび使用の管理AWS CloudShell
AWS Identity and Access Management によって提供されるアクセス管理リソースを使用して、管理者は IAM ユーザーにアクセス許可を付与できます。こうすれば、ユーザーは AWS CloudShell にアクセスし、環境の機能を使用できます。管理者は、ユーザーがシェル環境で実行できるアクションをきめ細かく指定するポリシーを作成することもできます。
管理者がユーザーにアクセス権を付与する最も簡単な方法は、AWS マネージドポリシーを介した方法です。AWS マネージドポリシーは、AWS で作成および管理されるスタンドアロンポリシーです。AWS CloudShell 用に次の AWS マネージドポリシーを IAM アイデンティティにアタッチできます。
-
AWSCloudShellFullAccess: AWS CloudShell のすべての機能にフルアクセスできるアクセス許可を付与します。
AWSCloudShellFullAccess ポリシーでは、ワイルドカード (*) 文字を使用して、IAM アイデンティティ (ユーザー、ロール、またはグループ) に CloudShell および機能へのフルアクセスを許可します。このポリシーの詳細については、「AWS マネージドポリシーユーザーガイド」の「AWSCloudShellFullAccess」を参照してください。
注記
以下の AWS マネージドポリシーを持つ IAM アイデンティティは CloudShell を起動することもできます。ただし、これらのポリシーは広範な許可を付与します。そのため、 IAM ユーザーのジョブロールに必須な場合のみ、これらのポリシーを許可することを推奨します。
-
管理者: フルアクセスを IAM ユーザーに提供し、AWS の各サービスおよびリソースへのアクセス許可を委任できます。
-
デベロッパーパワーユーザー: この IAM ユーザーはアプリケーション開発タスクを実行し、AWS 対応アプリケーションの開発をサポートするリソースとサービスを作成および設定できます。
マネージドポリシーをアタッチする方法の詳細については、IAM ユーザーガイドのIAM アイデンティ許可の追加 (コンソール)を参照してください。
AWS CloudShell でカスタムポリシーを使用して、許可されるアクションを管理する
IAM ユーザーが CloudShell で実行できるアクションを管理するには、CloudShellPolicy マネージドポリシーをテンプレートとして使用するカスタムポリシーを作成します。または、関連する IAM アイデンティティ (ユーザー、グループ、もしくはロール) に埋め込まれているインラインポリシーを編集します。
例えば、IAM ユーザーに CloudShell へのアクセスを許可する一方で、AWS Management Console へのログインに使用する CloudShell 環境認証情報の転送を禁止できます。
重要
IAM ユーザーが AWS Management Console から AWS CloudShell を開始するには、次のアクションについてアクセス許可が必要です。
-
CreateEnvironment
-
CreateSession
-
GetEnvironmentStatus
-
StartEnvironment
これらのアクションのひとつがアタッチされたポリシーによって明示的に許可されていない場合、CloudShell の起動時に IAM アクセス許可エラーが返されます。
名前 | 付与されたアクセス許可の説明 | CloudShell の起動に必要か? |
---|---|---|
|
CloudShell 環境を作成し、CloudShell セッションの開始時にレイアウトを取得して、バックエンドのウェブアプリケーションから現在のレイアウトを保存します。このアクセス許可は、「CloudShell の IAM ポリシーの例」で説明しているように |
はい |
|
AWS Management Console から CloudShell 環境に接続します。 |
はい |
|
CloudShell 環境のステータスを読み取ります。 |
はい |
|
CloudShell 環境を削除します。 |
いいえ |
|
CloudShell ウェブインターフェースを使用して CloudShell 経由でファイルをダウンロードする際に使用する、事前署名された Amazon S3 URL を生成します。これは VPC 環境では使用できません。 |
いいえ |
|
CloudShell ウェブインターフェースを使用して CloudShell 経由でファイルをアップロードする際に使用する、事前署名された Amazon S3 URL を生成します。これは VPC 環境では使用できません。 |
いいえ |
|
環境について説明します。 |
いいえ |
|
AWS Management Consoleへのログインに使用する認証情報を CloudShell に転送します。 |
いいえ |
|
停止している CloudShell 環境を起動します。 |
はい |
|
実行中の CloudShell 環境を停止します。 |
いいえ |
CloudShell の IAM ポリシーの例
次の例は、CloudShell へのアクセス可能なユーザーを制限するためのポリシーの作成方法を示しています。またこの例は、シェル環境で実行可能なアクションも示しています。
次のポリシーでは、CloudShell とその機能へのアクセスの完全拒否を強制的に実行します。
{ "Version": "2012-10-17", "Statement": [{ "Sid": "DenyCloudShell", "Effect": "Deny", "Action": [ "cloudshell:*" ], "Resource": "*" }] }
次のポリシーでは、IAM ユーザーが CloudShell にアクセスすることを許可しますが、ファイルのアップロードとダウンロード用の署名済み URL を生成することはブロックします。ユーザーは、例えば wget
のようなクライアントを使用して、環境に向けておよび環境からファイルを転送することができます。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowUsingCloudshell", "Effect": "Allow", "Action": [ "cloudshell:*" ], "Resource": "*" }, { "Sid": "DenyUploadDownload", "Effect": "Deny", "Action": [ "cloudshell:GetFileDownloadUrls", "cloudshell:GetFileUploadUrls" ], "Resource": "*" }] }
次のポリシーでは、IAM ユーザーに CloudShell へのアクセスを許可します。ただし、このポリシーでは AWS Management Console へのログインに使用した認証情報が CloudShell 環境に転送されるのを防止します。このポリシーを持つ IAM ユーザーは、CloudShell 内で認証情報を手動で設定する必要があります。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowUsingCloudshell", "Effect": "Allow", "Action": [ "cloudshell:*" ], "Resource": "*" }, { "Sid": "DenyCredentialForwarding", "Effect": "Deny", "Action": [ "cloudshell:PutCredentials" ], "Resource": "*" }] }
次のポリシーは、AWS CloudShell 環境を作成することを IAM ユーザーに許可します。
{ "Version": "2012-10-17", "Statement": [{ "Sid": "CloudShellUser", "Effect": "Allow", "Action": [ "cloudshell:CreateEnvironment", "cloudshell:CreateSession", "cloudshell:GetEnvironmentStatus", "cloudshell:StartEnvironment" ], "Resource": "*" }] }
CloudShell の VPC 環境を作成および使用するために必要な IAM アクセス許可
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 ポリシー
次の例は、CloudShell へのフルアクセス (VPC へのアクセスを含む) を許可する方法を示しています。
{ "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 条件キーの使用
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 設定の条件キーを使用したポリシーの例
以下の例は、VPC 設定で条件キーを使用する方法を示しています。必要な制限を含むポリシーステートメントを作成したら、このポリシーステートメントをターゲットのユーザーまたはロールに追加します。
ユーザーに VPC 環境の作成のみを許可し、パブリック環境の作成を拒否する
ユーザーに VPC 環境の作成のみを許可するには、次の例に示すように [拒否] アクセス許可を使用します。
{ "Statement": [ { "Sid": "DenyCloudShellNonVpcEnvironments", "Action": [ "cloudshell:CreateEnvironment" ], "Effect": "Deny", "Resource": "*", "Condition": { "Null": { "cloudshell:VpcIds": "true" } } } ] }
特定の VPC、サブネット、セキュリティグループへのアクセスをユーザーに拒否する
特定の VPC へのアクセスをユーザーに拒否するには、StringEquals
を使用して cloudshell:VpcIds
条件の値を確認します。次の例では、vpc-1
および vpc-2
へのアクセスをユーザーに拒否します。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "EnforceOutOfVpc", "Action": [ "cloudshell:CreateEnvironment" ], "Effect": "Deny", "Resource": "*", "Condition": { "StringEquals": { "cloudshell:VpcIds": [ "vpc-1", "vpc-2" ] } } } ] }
特定の VPC へのアクセスをユーザーに拒否するには、StringEquals
を使用して cloudshell:SubnetIds
条件の値を確認します。次の例では、subnet-1
および subnet-2
へのアクセスをユーザーに拒否します。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "EnforceOutOfVpc", "Action": [ "cloudshell:CreateEnvironment" ], "Effect": "Deny", "Resource": "*", "Condition": { "StringEquals": { "cloudshell:VpcIds": [ "vpc-1", "vpc-2" ] } } } ] }
特定の VPC へのアクセスをユーザーに拒否するには、StringEquals
を使用して cloudshell:SecurityGroupIds
条件の値を確認します。次の例では、sg-1
および sg-2
へのアクセスをユーザーに拒否します。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "EnforceOutOfSecurityGroups", "Action": [ "cloudshell:CreateEnvironment" ], "Effect": "Deny", "Resource": "*", "Condition": { "ForAnyValue:StringEquals": { "cloudshell:SecurityGroupIds": [ "sg-1", "sg-2" ] } } } ] }
特定の VPC 設定で環境を作成することをユーザーに許可する
特定の VPC にアクセスすることをユーザーに許可するには、StringEquals
を使用して cloudshell:VpcIds
条件の値を確認します。次の例では、vpc-1
および vpc-2
にアクセスすることをユーザーに許可します。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "EnforceStayInSpecificVpc", "Action": [ "cloudshell:CreateEnvironment" ], "Effect": "Allow", "Resource": "*", "Condition": { "StringEquals": { "cloudshell:VpcIds": [ "vpc-1", "vpc-2" ] } } } ] }
特定の VPC にアクセスすることをユーザーに許可するには、StringEquals
を使用して cloudshell:SubnetIds
条件の値を確認します。次の例では、subnet-1
および subnet-2
にアクセスすることをユーザーに許可します。
{ "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
にアクセスすることをユーザーに許可します。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "EnforceStayInSpecificSecurityGroup", "Action": [ "cloudshell:CreateEnvironment" ], "Effect": "Allow", "Resource": "*", "Condition": { "ForAllValues:StringEquals": { "cloudshell:SecurityGroupIds": [ "sg-1", "sg-2" ] } } } ] }
AWS のサービス へのアクセス許可
CloudShell は、AWS Management Console へのサインインに使用された IAM 認証情報を使用します。
注記
AWS Management Console へのサインインに使用された IAM 認証情報を使用するためには、cloudshell:PutCredentials
のアクセス許可を持つ必要があります。
CloudShell のこの事前認証機能は、AWS CLI を使用するうえで便利です。ただし、IAM ユーザーはコマンドラインから呼び出される AWS のサービス について明示的な許可が必要です。
例えば、IAM ユーザーが Amazon S3 バケットを作成し、ファイルをオブジェクトとしてそこにアップロードする必要があるとします。これらのアクションを明示的に許可するポリシーを作成することができます。IAM コンソールには、JSON 形式のポリシードキュメントを作成する手順を説明するインタラクティブなビジュアルエディタが用意されています。ポリシーを作成した後、関連する IAM アイデンティティ (ユーザー、グループ、もしくはロール) にアタッチできます。
マネージドポリシーをアタッチする方法の詳細については、IAM ユーザーガイドのIAM アイデンティ許可の追加 (コンソール)を参照してください。
CloudShell の Amazon Q CLI 機能へのアクセス許可
CloudShell でインライン提案、チャット、翻訳などの Amazon Q CLI 機能を使用するには、必要な IAM アクセス許可があることを確認してください。CloudShell で Amazon Q CLI 機能にアクセスできない場合は、管理者に連絡して必要な IAM アクセス許可を得てください。詳細については、「Amazon Q Developer ユーザーガイド」の「Amazon Q Developer のアイデンティティベースのポリシー例」を参照してください。