9.2. サービスアカウントがユーザー定義プロジェクトで AWS IAM ロールを引き受ける方法
Red Hat OpenShift Service on AWS クラスターをインストールすると、Pod アイデンティティー Webhook リソースがデフォルトで含まれます。
Pod ID Webhook を使用して、ユーザー定義プロジェクトのサービスアカウントが、同じプロジェクトの Pod で AWS Identity and Access Management (IAM) ロールを引き受けることができます。IAM ロールを引き受けると、Pod 内のサービスアカウントが使用する一時的な STS 認証情報が提供されます。引き受けたロールに必要な AWS 権限がある場合、サービスアカウントは Pod で AWS SDK 操作を実行できます。
Pod の Pod ID Webhook を有効にするには、プロジェクトで eks.amazonaws.com/role-arn アノテーションを使用してサービスアカウントを作成する必要があります。アノテーションは、サービスアカウントが引き受ける AWS IAM ロールの Amazon Resource Name (ARN) を参照する必要があります。また、Pod 仕様でサービスアカウントを参照し、サービスアカウントと同じプロジェクトに Pod をデプロイする必要があります。
9.2.1. ユーザー定義プロジェクトでの Pod ID Webhook ワークフロー リンクのコピーリンクがクリップボードにコピーされました!
次の図は、ユーザー定義プロジェクトでの Pod ID Webhook ワークフローを示しています。
図9.2 ユーザー定義プロジェクトでの Pod ID Webhook ワークフロー
ワークフローには次の段階があります。
-
ユーザー定義のプロジェクト内で、ユーザーは
eks.amazonaws.com/role-arnアノテーションを含むサービスアカウントを作成します。アノテーションは、サービスアカウントが引き受ける AWS IAM ロールの ARN を指します。 アノテーション付きのサービスアカウントを参照する設定を使用して Pod が同じプロジェクトにデプロイされると、Pod ID Webhook により Pod が変更になります。ミューテーションは、
PodまたはDeploymentリソース設定で指定する必要なく、次のコンポーネントを Pod に挿入します。-
AWS SDK オペレーションを実行するために必要なアクセス権を持つ IAM ロールの ARN を含む
$AWS_ARN_ROLE環境変数。 -
サービスアカウントの OpenID Connect (OIDC) トークンへの Pod 内のフルパスを含む
$AWS_WEB_IDENTITY_TOKEN_FILE環境変数。フルパスは/var/run/secrets/eks.amazonaws.com/serviceaccount/tokenです。 -
マウントポイント
/var/run/secrets/eks.amazonaws.com/serviceaccountにマウントされたaws-iam-tokenボリューム。tokenという名前の OIDC トークンファイルがボリュームに含まれています。
-
AWS SDK オペレーションを実行するために必要なアクセス権を持つ IAM ロールの ARN を含む
OIDC トークンは、Pod から OIDC プロバイダーに渡されます。次の要件が満たされている場合は、プロバイダーがサービスアカウント ID を認証します。
- ID 署名は有効であり、秘密鍵によって署名されています。
sts.amazonaws.comオーディエンスは OIDC トークンにリストされており、OIDC プロバイダーで設定されたオーディエンスと一致します。注記Pod ID Webhook は、デフォルトで
sts.amazonaws.comオーディエンスを OIDC トークンに適用します。- OIDC トークンの有効期限が切れていません。
- トークンの発行者の値には、OIDC プロバイダーの URL が含まれています。
- プロジェクトとサービスアカウントが、引き受ける IAM ロールの信頼ポリシーのスコープ内にある場合は、認可が成功します。
- 認証と認可が成功すると、セッショントークンの形式の一時的な AWS STS 認証情報が Pod に渡され、サービスアカウントで使用できるようになります。認証情報を使用することで、IAM ロールで有効になっている AWS アクセス許可がサービスアカウントに一時的に付与されます。
- Pod で AWS SDK オペレーションを実行すると、サービスアカウントは一時的な STS 認証情報を AWS API に提供して、その ID を確認します。