

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用 IAM 政策管理 AWS CloudShell 存取和用量
<a name="sec-auth-with-identities"></a>

透過 提供的存取管理資源 AWS Identity and Access Management，管理員可以將許可授予 IAM 使用者。如此一來，這些使用者可以存取 AWS CloudShell 和使用環境的功能。管理員也可以建立政策，在精細層級指定這些使用者可以使用 shell 環境執行的動作。

管理員授予使用者存取權的最快速方法是透過 AWS 受管政策。[AWS 受管政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#aws-managed-policies)是由 建立和管理的獨立政策 AWS。下列 受 AWS 管政策 AWS CloudShell 可以連接到 IAM 身分：
+ **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 身分也可以啟動 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，但防止他們轉送用於登入 的 CloudShell 環境登入資料 AWS 管理主控台。

 

**重要**  
若要 AWS CloudShell 從 啟動 AWS 管理主控台，IAM 使用者需要下列動作的許可：  
`CreateEnvironment`
`CreateSession`
`GetEnvironmentStatus`
`StartEnvironment`
如果連接的政策未明確允許其中一個動作，當您嘗試啟動 CloudShell 時，會傳回 IAM 許可錯誤。


**AWS CloudShell 許可**  

| 名稱 | 所授予之許可的描述 | 需要啟動 CloudShell？ | 
| --- | --- | --- | 
|  `cloudshell:CreateEnvironment`  |  建立 CloudShell 環境、在 CloudShell 工作階段開始時擷取配置，並從後端的 Web 應用程式儲存目前的配置。此許可僅預期 `*` 的值，`Resource`如 中所述[CloudShell 的 IAM 政策範例](#policy-examples)。  |  是  | 
|  `cloudshell:CreateSession`  | 從 連線至 CloudShell 環境 AWS 管理主控台。 |  是  | 
|  `cloudshell:GetEnvironmentStatus`  |  讀取 CloudShell 環境的狀態。  |  是  | 
|  `cloudshell:DeleteEnvironment`  |  刪除 CloudShell 環境。  |  否  | 
|   `cloudshell:GetFileDownloadUrls`  |  產生預先簽章的 Amazon S3 URLs，用於使用 CloudShell Web 介面透過 CloudShell 下載檔案。這不適用於 VPC 環境。  |  否  | 
|   `cloudshell:GetFileUploadUrls`  |  產生預先簽章的 Amazon S3 URLs，用於使用 CloudShell Web 介面透過 CloudShell 上傳檔案。這不適用於 VPC 環境。  |  否  | 
| `cloudshell:DescribeEnvironments` | 說明環境。 | 否 | 
|  `cloudshell:PutCredentials`  |  將用來登入 的登入資料轉送 AWS 管理主控台 至 CloudShell。  |  否  | 
|   `cloudshell:StartEnvironment`  |  啟動已停止的 CloudShell 環境。  |  是  | 
|   `cloudshell:StopEnvironment`  |  停止正在執行的 CloudShell 環境。  |  否  | 
|  `cloudshell:ApproveCommand`  | 核准從其他 AWS Service 主控台傳送至 CloudShell 的命令。 | 否 | 

### CloudShell 的 IAM 政策範例
<a name="policy-examples"></a>

下列範例示範如何建立政策來限制誰可以存取 CloudShell。這些範例也會顯示可在 shell 環境中執行的動作。

以下政策強制完全拒絕存取 CloudShell 及其功能。

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

****  

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

------

以下政策允許 IAM 使用者存取 CloudShell，但封鎖他們產生預先簽章URLs 以進行檔案上傳和下載。使用者仍然可以使用 `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。不過，此政策可防止您用來登入 的登入資料 AWS 管理主控台 轉送至 CloudShell 環境。具有此政策的 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 環境建立ENIs 會加上**ManagedByCloudShell**金鑰標籤）。如果此許可未啟用，您必須在每次 CloudShell VPC 環境使用後手動清除 ENI 資源。

### 授予完整 CloudShell 存取權的 IAM 政策，包括對 VPC 的存取
<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` – 允許或拒絕一或多個 VPCs
+ `CloudShell:SubnetIds` – 允許或拒絕一或多個子網路
+ `CloudShell:SecurityGroupIds` – 允許或拒絕一或多個安全群組

**注意**  
如果修改可存取公有 CloudShell 環境的使用者許可，以對`cloudshell:createEnvironment`動作新增限制，他們仍然可以存取現有的公有環境。不過，如果您想要修改具有此限制的 IAM 政策，並停用其對現有公有環境的存取，您必須先更新具有限制的 IAM 政策，然後確保帳戶中的每個 CloudShell 使用者使用 CloudShell Web 使用者介面 (**動作** → **刪除 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>

若要允許使用者存取特定 VPCs，請使用 `StringEquals`檢查`cloudshell:VpcIds`條件的值。下列範例允許使用者存取 `vpc-1`和 `vpc-2`：

若要允許使用者存取特定 VPCs，請使用 `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"
          ]
        }
      }
    }
  ]
}
```

------

若要允許使用者存取特定 VPCs，請使用 `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 會使用您用來登入 的 IAM 登入資料 AWS 管理主控台。

**注意**  
 若要使用您用來登入 的 IAM 登入資料 AWS 管理主控台，您必須擁有 `cloudshell:PutCredentials`許可。

CloudShell 的預先驗證功能可讓您方便使用 AWS CLI。不過，IAM 使用者仍需要從命令列呼叫 AWS 服務 的明確許可。

例如，假設 IAM 使用者需要建立 Amazon S3 儲存貯體並將檔案上傳為物件。您可以建立明確允許這些動作的政策。IAM 主控台提供互動式[視覺化編輯器](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create-console.html#access_policies_create-start)，引導您完成建置 JSON 格式政策文件的程序。建立政策後，您可以將政策連接至相關的 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 開發人員使用者指南》中的 Amazon Q 開發人員的身分型政策範例](https://docs.aws.amazon.com/en_us/amazonq/latest/qdeveloper-ug/security_iam_id-based-policy-examples.html)。 **