

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

# アクセス許可の設定
<a name="permission-setup"></a>

## アドオンとその依存関係に必要なロール
<a name="permission-setup-addon"></a>

### SageMaker HyperPod の SageMaker スペースに必要な IAM ロール
<a name="role-hyperpod"></a>

**SageMaker HyperPod (EKS) クラスターで SageMaker Spaces (a.k.aSageMaker**** IDE / Notebooks SageMaker**) 機能を有効にする場合は、複数の IAM ロールを作成して割り当てる必要があります。 SageMaker HyperPod これらのロールは、安全なアクセス、ルーティング、リモート IDE セッション、EBS ストレージのプロビジョニングをサポートします。次の表は、4 つのロールと、必要なタイミングをまとめたものです。

### ロールの概要テーブル
<a name="role-table"></a>


| IAM ロール | 必須? | 目的 | 誰がそれを使用しますか? | SageMaker コンソールでカスタマイズが許可されますか? | 
| --- | --- | --- | --- | --- | 
| Spaces アドオン実行ロール | 常に必須 | Spaces コントローラーによるスペースの管理、署名付き URLsの生成、SSM セッションの管理を許可する | アドオンコントローラーポッド (特権) | ✔ はい | 
| クラスター内ルーターロール | WebUI アクセスに必要です | ルーターポッドが JWT 署名の KMS オペレーションを実行することを許可する (WebUI 認証) | クラスター内ルーターポッド (特権) | ✔ はい | 
| SSM マネージドインスタンスロール | リモート IDE アクセスに必要です | SSM エージェントのサイドカーが SSH-over-SSM リモート IDE セッションに使用する | スペース IDE ポッドの SSM エージェント (アドオンポッドではない) | ✔ はい | 
| EBS CSI ドライバーアドオンの IAM ロール | 常に必須 | EBS CSI ドライバーが Spaces ワークロードのボリュームcreate/attach/modifyすることを許可する | EBS CSI ドライバーアドオン | 自動作成 | 
| 外部 DNS アドオンの IAM ロール | WebUI アクセスに必要です | これにより、スペースエンドポイントとクラスター内のコンポーネントに、顧客の Route 53 ホストゾーンで DNS 名を自動的に割り当てることができます。 | 外部 DNS アドオン | 自動作成 | 

### 1. Spaces アドオン実行ロール (必須)
<a name="add-n-execution-role"></a>

Spaces アドオン実行ロールは、EKS アドオンを介してインストールされる管理コンポーネントである SageMaker Spaces アドオンコントローラーポッドで使用されるため、常に必要です。このロールにより、コントローラーはスペースの管理、リソースのプロビジョニング、SSM とのやり取り、リモート IDE と WebUI アクセスの両方の署名付き URLs の生成を行うことができます。また、WebUI https リクエストを認証するためのリクエスト署名に使用される KMS アクセスもサポートしています。このロールは、SageMaker コンソールを介して SageMaker Spaces アドオンがインストールされているときに自動的に作成できます。手動作成の場合、 は `AmazonSageMakerSpacesControllerPolicy`管理ポリシー AWS を提供します。

**参照信頼ポリシー**

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "pods.eks.amazonaws.com"
      },
      "Action": [
          "sts:AssumeRole",
          "sts:TagSession"
      ],
      "Condition": {
        "StringEquals": {
          "aws:SourceAccount": "{{accountId}}",
          "aws:SourceArn": "arn:aws:eks:{{region}}:{{accountId}}:cluster/{{eksClusterName}}"
        }
      }
    }
  ]
}
```

### 2. クラスター内ルーターロール (WebUI 認証に必須)
<a name="in-cluster-role"></a>

クラスター内ルーターロールは、Spaces WebUI セッションを認証する特権コンポーネントである**ルーターポッド**によって使用されます。ルーターは KMS キーを使用して、特定の Spaces へのユーザーアクセスを許可する JWT トークンを作成して署名します。このロールにより、ルーターポッドはデータキーを生成して復号できます。コントローラーロールと同様に、タグベースおよびクラスターベースのスコープ制限を使用してセキュリティを適用します。このロールは、Spaces アドオンが AWS SageMaker コンソールを介してインストールされたときに自動的に生成できますが、お客様は手動で作成できます。

**参照信頼ポリシー**

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "pods.eks.amazonaws.com"
      },
      "Action": [
          "sts:AssumeRole",
          "sts:TagSession"
      ],
      "Condition": {
        "StringEquals": {
          "aws:SourceAccount": "{{accountId}}",
          "aws:SourceArn": "arn:aws:eks:{{region}}:{{accountId}}:cluster/{{eksClusterName}}"
        }
      }
    }
  ]
}
```

**リファレンスアクセス許可ポリシー**

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "KMSDescribeKey",
            "Effect": "Allow",
            "Action": [
                "kms:DescribeKey"
            ],
            "Resource": "arn:aws:kms:{{region}}:{{accountId}}:key/{{kmsKeyId}}"
        },
        {
            "Sid": "KMSKeyOperations",
            "Effect": "Allow",
            "Action": [
                "kms:GenerateDataKey",
                "kms:Decrypt"
            ],
            "Resource": "arn:aws:kms:{{region}}:{{accountId}}:key/{{kmsKeyId}}",
            "Condition": {
                "StringEquals": {
                    "kms:EncryptionContext:sagemaker:component": "amazon-sagemaker-spaces",
                    "kms:EncryptionContext:sagemaker:eks-cluster-arn": "${aws:PrincipalTag/eks-cluster-arn}"
                }
            }
        }
    ]
}
```

### 3. SSM マネージドインスタンスロール (リモート IDE アクセスに必要)
<a name="ssm-role"></a>

SSM マネージドインスタンスロールは、リモート IDE アクセスを有効にするために SSM マネージドインスタンスを登録するときに渡されます。このロールにより、SSM エージェントはポッドを SSM マネージドインスタンスとして登録し、リモート IDE (SSH-over-SSM) 接続に SSM セッションマネージャーチャネルを使用できます。SageMaker コンソールを使用する場合 AWS に自動的に作成できます。手動デプロイの場合、お客様はこのロールを作成し、Spaces アドオンに提供する必要があります。コントローラーポッド自体は、このロールを引き受けません。 を呼び出すときにのみ提供されます`ssm:CreateActivation`。

**参照信頼ポリシー**

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "ssm.amazonaws.com"
            },
            "Action": "sts:AssumeRole",
            "Condition": {
                "StringEquals": {
                    "aws:SourceAccount": "{{account}}"
                },
                "ArnEquals": {
                    "aws:SourceArn": "arn:aws:ssm:{{region}}:{{account}}:*"
                }
            }
        }
    ]
}
```

**リファレンスアクセス許可ポリシー**

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "ssm:DescribeAssociation"
      ],
      "Resource": [
        "arn:aws:ssm:{{region}}:{{account}}:association/*",
        "arn:aws:ssm:{{region}}:{{account}}:document/*",
        "arn:aws:ec2:{{region}}:{{account}}:instance/*",
        "arn:aws:ssm:{{region}}:{{account}}:managed-instance/*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "ssm:GetDocument",
        "ssm:DescribeDocument"
      ],
      "Resource": "arn:aws:ssm:{{region}}:{{account}}:document/*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "ssm:GetParameter",
        "ssm:GetParameters"
      ],
      "Resource": "arn:aws:ssm:{{region}}:{{account}}:parameter/*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "ssm:ListInstanceAssociations"
      ],
      "Resource": [
        "arn:aws:ec2:{{region}}:{{account}}:instance/*",
        "arn:aws:ssm:{{region}}:{{account}}:managed-instance/*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "ssm:PutComplianceItems"
      ],
      "Resource": [
        "arn:aws:ec2:{{region}}:{{account}}:instance/*",
        "arn:aws:ssm:{{region}}:{{account}}:managed-instance/*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "ssm:UpdateAssociationStatus"
      ],
      "Resource": [
        "arn:aws:ssm:{{region}}:{{account}}:document/*",
        "arn:aws:ec2:{{region}}:{{account}}:instance/*",
        "arn:aws:ssm:{{region}}:{{account}}:managed-instance/*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "ssm:UpdateInstanceAssociationStatus"
      ],
      "Resource": [
        "arn:aws:ssm:{{region}}:{{account}}:association/*",
        "arn:aws:ec2:{{region}}:{{account}}:instance/*",
        "arn:aws:ssm:{{region}}:{{account}}:managed-instance/*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "ssm:UpdateInstanceInformation"
      ],
      "Resource": [
        "arn:aws:ec2:{{region}}:{{account}}:instance/*",
        "arn:aws:ssm:{{region}}:{{account}}:managed-instance/*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "ssm:GetDeployablePatchSnapshotForInstance",
        "ssm:GetManifest",
        "ssm:ListAssociations",
        "ssm:PutInventory",
        "ssm:PutConfigurePackageResult"
      ],
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "ssmmessages:CreateControlChannel",
        "ssmmessages:CreateDataChannel",
        "ssmmessages:OpenControlChannel",
        "ssmmessages:OpenDataChannel"
      ],
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "ec2messages:AcknowledgeMessage",
        "ec2messages:DeleteMessage",
        "ec2messages:FailMessage",
        "ec2messages:GetEndpoint"
      ],
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "ec2messages:GetMessages",
        "ec2messages:SendReply"
      ],
      "Resource": "*",
      "Condition": {
        "ArnLike": {
          "ssm:SourceInstanceARN": "arn:aws:ssm:{{region}}:{{account}}:managed-instance/*"
        }
      }
    }
  ]
}
```

### 4. EBS CSI ドライバーアドオンの IAM ロール
<a name="role-ebs-csi"></a>

EBS CSI ドライバーは Spaces ワークロードの永続ボリュームをプロビジョニングするため、EBS CSI ドライバーの IAM ロールが必要です。 AWSマネージド [AmazonEBSCSIDriverPolicy](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonEBSCSIDriverPolicy.html) はベースラインアクセス許可を提供しますが、SageMaker HyperPod クラスターには、高速スナップショット復元の作成、クラスター所有ボリュームのタグ付け、HyperPod マネージドノードのボリュームのアタッチ/デタッチなどの[追加機能](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-hyperpod-eks-ebs.html#sagemaker-hyperpod-eks-ebs-setup)が必要です。これらのアクセス許可には、 などの SageMaker 固有の APIs も含まれます`sagemaker:AttachClusterNodeVolume`。EBS CSI ドライバーがインストールされていない場合、Spaces アドオンのインストール中に SageMaker コンソールによってこのロールが自動的に作成されるようになり、**お客様のアクションは必要ありません**。

### 5. 外部 DNS アドオンの IAM ロール
<a name="role-external-nds"></a>

外部 DNS アドオンは、HyperPod クラスターのサービスとイングレスリソースの DNS レコードを管理します。これにより、スペースエンドポイントとクラスター内のコンポーネントに、顧客の Route 53 ホストゾーンで DNS 名を自動的に割り当てることができます。現在、お客様は EKS コンソールのワンクリックオプションを使用して外部 DNS を手動でインストールすることがよくあります。SageMaker Spaces エクスペリエンスの向上の一環として、Spaces アドオンのインストール中に SageMaker コンソールによってこのロールが自動的に作成されるようになり、**お客様のアクションは必要ありません**。

## AWS Toolkit が SageMaker スペースにアクセスするためのアクセス許可の設定
<a name="permission-for-toolkitl"></a>

 AWS VS Code Toolkit リソースエクスプローラーサイドパネルが SageMaker Spaces を検出して接続できるようにするには、次の IAM アクセス許可が必要です。これらのアクセス許可により、Toolkit は使用可能な SageMaker HyperPod クラスターを一覧表示し、クラスターの詳細を取得し、関連付けられた Amazon EKS クラスターの接続トークンを取得できます。

**必要な IAM ポリシー**

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "SageMakerListClusters",
            "Effect": "Allow",
            "Action": "sagemaker:ListClusters",
            "Resource": "*"
        },
        {
            "Sid": "SageMakerDescribeCluster",
            "Effect": "Allow",
            "Action": "sagemaker:DescribeCluster",
            "Resource": "arn:aws:sagemaker:{{region}}:{{account}}:cluster/cluster-name"
        },
        {
            "Sid": "EksDescribeCluster",
            "Effect": "Allow",
            "Action": "eks:DescribeCluster",
            "Resource": "arn:aws:eks:{{region}}:{{account}}:cluster/cluster-name"
        },
        {
            "Sid": "EksGetToken",
            "Effect": "Allow",
            "Action": "eks:GetToken",
            "Resource": "*"
        }
    ]
}
```

**スコープに関する推奨事項**
+ cluster-name を、ユーザーがアクセスする必要がある特定の SageMaker HyperPod クラスター (複数可) に置き換えます。
+ eks:GetToken アクションは現在リソースレベルの制限をサポートしておらず、リソース「\*」を使用する必要があります。これは AWS サービスの制限です。クライアント側の認証は、[EKS アクセスエントリ](https://docs.aws.amazon.com/eks/latest/userguide/access-entries.html)を介して実行されます。