AWS announces preview of AWS Interconnect - multicloud
AWS announces AWS Interconnect – multicloud (preview), providing simple, resilient, high-speed private connections to other cloud service providers. AWS Interconnect - multicloud is easy to configure and provides high-speed, resilient connectivity with dedicated bandwidth, enabling customers to interconnect AWS networking services such as AWS Transit Gateway, AWS Cloud WAN, and Amazon VPC to other cloud service providers with ease.
Amazon EKS クラスターにアクセスするように SSO ユーザーを設定する方法を教えてください。
AWS IAM アイデンティティセンター (AWS Single Sign-On の後継) を使っています。しかし、Amazon Elastic Kubernetes Service (Amazon EKS) クラスターにアクセスできません。クラスターにアクセスするように SSO ユーザーを設定したいです。
解決方法
次の前提条件が満たされていることを確認してください。
- IAM Identity Center を有効にして設定しました。
- SSO ユーザーは Amazon EKS クラスターが存在する AWS アカウントに関連付けられています。
注: 以下の手順では、kubectl を使用してクラスターにアクセスします。kubectl アクセスを設定すると、IAM Identity Center ユーザーとしてログインすることで Amazon EKS コンソールにクラスターリソースが表示されます。
注: AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行時にエラーが発生する場合は、最新バージョンの AWS CLI が実行されていることを確認してください。
SSO ユーザーを使用するように AWS CLI を設定する
AWS CLI コマンドを実行するときに SSO 認証を使用する AWS コマンドラインインターフェイス (AWS CLI) プロファイルを作成します。詳細については、「AWS IAM アイデンティティセンター (AWS Single Sign-On の後継) を使用するように AWS CLI を設定する」を参照してください。
以下は、自動手順を使用した AWS CLI SSO 設定の例です。
aws configure sso SSO start URL [None]: https://my-sso-portal.awsapps.com/start SSO region [None]: us-east-1
AWS CLI はデフォルトのブラウザを開き、 IAM アイデンティティセンターアカウントのログインプロセスを開始しようとします。
Attempting to automatically open the SSO authorization page in your default browser.
AWS CLI がブラウザを開くことができない場合は、ログインプロセスを手動で開始する方法が記載された次のメッセージが表示されます。
If the browser does not open or you wish to use a different device to authorize this request, open the following URL: https://device.sso.us-east-2.amazonaws.com/ Then enter the code: XXXX-XXXX The only AWS account available to you is: 123456789999 Using the account ID 123456789999 The only role available to you is: ViewOnlyAccess Using the role name "ViewOnlyAccess" CLI default client Region [us-east-2]: CLI default output format [json]: CLI profile name [ViewOnlyAccess-123456789999]: test-profile To use this profile, specify the profile name using --profile, as shown: aws s3 ls --profile test-profile
これで、この新しいプロファイルを使用して AWS CLI コマンドを実行できるようになりました。この設定により、SSO ユーザーは次の操作を行うことができます。
- AWS で認証します。
- IAM アイデンティティセンターによって作成された AWS ID および管理 (IAM) ロールを想定します。
例:
$ aws sts get-caller-identity { "UserId": "AROAXMRV33N1234567890:test-user", "Account": "123456789999", "Arn": "arn:aws:sts::123456789999:assumed-role/AWSReservedSSO_ViewOnlyAccess_05a3861234567890/test-user" }
SSO 用に作成された AWS CLI プロファイルを使用するように kubectl コンテキストを設定します
Kubectl は AWS CLI コマンドを使用します。そのため、kubectl の現在のコンテキストで新しい AWS CLI プロファイルを指定する必要があります。kubectl context を更新して新しいプロファイルを使用するには、以下のコマンドを実行します。
aws eks update-kubeconfig --name $CLUSTER-NAME --profile test-profile
このコマンドを実行すると、kubectl はプロファイル test-profile を使用してクラスター API サーバーで認証します。
パスを除外して ARN バージョンを構築する
aws-auth ConfigMap にマッピングされている IAM ロールにはパスが含まれていません。デフォルトでは、SSO ユーザーに関連付けられている IAM ロールの Amazon リソースネーム (ARN) にはパスが含まれます。
例:
arn:aws:iam::123456789999:role/aws-reserved/sso.amazonaws.com/us-east-2/AWSReservedSSO_ViewOnlyAccess_05a3861234567890
完全な ARN を aws-auth ConfigMap に追加した場合、SSO ユーザーは認証されません。SSO ユーザーを使用してクラスターにアクセスすることはできません。必ず、この ARN のバージョンをパスを含めずに構築してください。このバージョンは次の手順で使用する必要があります
例:
arn:aws:iam::123456789000:role/AWSReservedSSO_ViewOnlyAccess_05a38657af2a0a01
以下のコマンドを実行して、パスなしで IAM ロールを取得することもできます。
ssorole=$(aws sts get-caller-identity --query Arn --output text --profile test-profile | cut -d/ -f2) account=$(aws sts get-caller-identity --query Account --output text --profile test-profile) echo "arn:aws:iam::$account:role/$ssorole" arn:aws:iam::123456789000:role/AWSReservedSSO_ViewOnlyAccess_05a38657af2a0a01
ARN を aws-auth ConfigMap に追加します
SSO ユーザーが Amazon EKS クラスターにアクセスするには、SSO ユーザーに関連付けられている IAM ロールを Kubernetes RBAC 権限にマッピングする必要があります。そのためには、パスのない IAM ロール ARN を aws-auth ConfigMap に含めてください。次に、それを Kubernetes ユーザーと Kubernetes Role と RoleBinding (または ClusterRole と ClusterRoleBinding) にリンクされているグループにマッピングします。ユースケースに応じて、以下のセクションのいずれかの手順を使用してください。
クラスター全体の管理者権限を持つ SSO ユーザー
デフォルトでは、Kubernetes グループの system:masters はクラスター全体の管理者権限を提供します。このグループは ClusterRole cluster-admin と ClusterRoleBinding cluster-admin にリンクされています。そのため、新しい ClusterRole オブジェクトと ClusterBindingRole オブジェクトを作成する必要はありません。パスのない IAM ロールを system:masters グループにマッピングするだけで済みます。
これを行うには、aws-auth ConfigMap を編集します。
kubectl edit configmap aws-auth -n kube-system
次に、以下を追加します。
- groups: - system:masters rolearn: arn:aws:iam::123456789000:role/AWSReservedSSO_ViewOnlyAccess_05a38657af2a0a01 username: cluster-admin
名前空間にバウンドされた読み取り権限を持つ SSO ユーザー
この場合、特定の名前空間内で読み取り権限を持つ Role と RoleBinding を作成する必要があります。次に、aws-auth ConfigMap のカスタムユーザー名またはグループ名を使用して、これらのオブジェクトを IAM ロールにリンクします。
1. 希望する名前空間の読み取り権限のみを許可する Kubernetes Role オブジェクトを作成します。
cat << EOF | kubectl apply -f - apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: namespace: $MY-NAMESPACE name: reader-role rules: - apiGroups: [""] # "" indicates the core API group resources: ["*"] verbs: ["get", "watch", "list"] EOF
注意:
- $MY-NAMESPACE を自分の名前空間の名前に置き換えてください。
- reader-role をカスタムユーザー名に置き換えます。
2. Kubernetes ロール権限を read-only-groupグループにリンクする Kubernetes RoleBinding オブジェクトを作成します。
cat <<EOF | kubectl apply -f - apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: reader-binding namespace: MY-NAMESPACE subjects: - kind: Group name: read-only-group apiGroup: rbac.authorization.k8s.io roleRef: kind: Role name: reader-role apiGroup: rbac.authorization.k8s.io EOF
3. パスのない IAM ロール ARN を aws-auth ConfigMap の read-only-group グループにマッピングします。
次のコマンドを実行すると、IAM ロールを自動的にマッピングできます。
eksctl create iamidentitymapping \ --cluster $CLUSTER-NAME \ --region $REGION \ --arn arn:aws:iam::123456789000:role/AWSReservedSSO_ViewOnlyAccess_05a38657af2a0a01 \ --group read-only-group \ --no-duplicate-arns \ --username read-only-user1
注: $CLUSTER-NAME と $REGION は、それぞれクラスターとリージョンの名前に置き換えてください。 または、IAM ロールを手動でマッピングすることもできます。これを行うには、aws-auth ConfigMap を編集します。
kubectl edit configmap aws-auth -n kube-system
次に、mapRoles セクションに以下を追加します。
- groups: - read-only-group rolearn: arn:aws:iam::123456789000:role/AWSReservedSSO_ViewOnlyAccess_05a38657af2a0a01 username: read-only-user1
重要: IAM ロールは aws-auth ConfigMap に 1 回だけ表示する必要があります。したがって、IAM ロールを含むセクションは 1 つだけにしてください。
これで、SSO ユーザーを使用してクラスターにアクセスできるようになりました。
$ kubectl get pod NAME READY STATUS RESTARTS AGE web-0 1/1 Running 0 24h
関連情報
- トピック
- Containers
- 言語
- 日本語

関連するコンテンツ
- 質問済み 10ヶ月前