9.2. サービスアカウントがユーザー定義プロジェクトで AWS IAM ロールを引き受ける方法
AWS Security Token Service (STS) を使用する Red Hat OpenShift Service on AWS クラスターをインストールすると、Pod ID 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 をデプロイする必要があります。
ユーザー定義プロジェクトでの 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 トークンに適用します。STS クラスターを使用する Red Hat OpenShift Service on AWS では、インストール中に OIDC プロバイダーが作成され、デフォルトでサービスアカウント発行者として設定されます。
sts.amazonaws.com
オーディエンスは、デフォルトで OIDC プロバイダーに設定されています。- OIDC トークンの有効期限が切れていません。
- トークンの発行者の値には、OIDC プロバイダーの URL が含まれています。
- プロジェクトとサービスアカウントが、引き受ける IAM ロールの信頼ポリシーのスコープ内にある場合は、認可が成功します。
- 認証と認可が成功すると、セッショントークンの形式の一時的な AWS STS 認証情報が Pod に渡され、サービスアカウントで使用できるようになります。認証情報を使用することで、IAM ロールで有効になっている AWS アクセス許可がサービスアカウントに一時的に付与されます。
- Pod で AWS SDK オペレーションを実行すると、サービスアカウントは一時的な STS 認証情報を AWS API に提供して、その ID を確認します。