ACK アクセス許可を設定する - Amazon EKS

このページの改善にご協力ください

このユーザーガイドに貢献するには、すべてのページの右側のペインにある「GitHub でこのページを編集する」リンクを選択してください。

ACK アクセス許可を設定する

自分の代わりに ACK で AWS リソースを作成および管理できるようにするには、IAM アクセス許可が必要です。このトピックでは、IAM が ACK でどのように機能するかを説明し、さまざまなユースケースに合わせてアクセス許可を設定する際のガイダンスを示します。

IAM は ACK でどのように機能するか

ACK は、IAM ロールを使用して AWS で認証し、リソースに対してアクションを実行します。ACK にアクセス許可を付与する方法が 2 つあります。

機能ロール: ACK 機能の作成時に指定する IAM ロールです。このロールは、デフォルトではすべての ACK オペレーションに使用されます。

IAM ロールセレクター: 特定の名前空間またはリソースにマッピングできる追加の IAM ロールです。これらのロールの範囲内にあるリソースの機能ロールは上書きされます。

リソースを作成または管理する必要があるときに、ACK はどの IAM ロールを使用するかを決定します。

  1. IAMRoleSelector がリソースの名前空間に一致するかどうかを確認します。

  2. 一致した場合、その IAM ロールを引き受けます。

  3. 一致しない場合、機能ロールを使用します。

このアプローチにより、シンプルな単一ロールセットアップから複雑なマルチアカウントかつマルチチームの設定まで、アクセス許可を柔軟に管理できます。

使用開始: シンプルなアクセス許可セットアップ

開発、テスト、またはシンプルなユースケースの場合、必要なすべてのサービスアクセス許可を機能ロールに直接追加できます。

このアプローチは、次の場合に適しています。

  • ACK の使用を開始している

  • すべてのリソースが同じ AWS アカウントにある

  • 1 つのチームがすべての ACK リソースを管理する

  • すべての ACK ユーザーに同じアクセス許可が付与されていると確信している

本番稼働でのベストプラクティス: IAM ロールセレクター

本番稼働環境では、IAM ロールセレクターを使用して、最小特権のアクセスと名前空間レベルでの分離を実装します。

IAM ロールセレクターを使用する場合、機能ロールに必要な sts:AssumeRole アクセス許可はサービス固有のロールを引き受けるためのアクセス許可だけです。機能ロール自体に AWS サービスアクセス許可 (S3 や RDS など) を追加する必要はありません。そうしたアクセス許可は、機能ロールが引き受ける個々の IAM ロールに付与します。

アクセス許可モデルを選択する:

次の場合は、直接アクセス許可 (機能ロールにサービスアクセス許可を追加すること) を使用します。

  • 使用を開始し、最もシンプルなセットアップにする場合

  • すべてのリソースがクラスターと同じアカウントにある場合

  • クラスター全体の管理アクセス許可を必要とする場合

  • すべてのチームが同じアクセス許可を共有できる場合

次の場合は、IAM ロールセレクターを使用します。

  • 複数の AWS アカウント全体のリソースを管理する場合

  • チームや名前空間ごとに異なるアクセス許可が必要な場合

  • 名前空間ごとにきめ細かなアクセスコントロールが必要な場合

  • 最小特権のセキュリティプラクティスに従う場合

直接アクセス許可から開始し、その後、要件の増大に応じて IAM ロールセレクターに移行できます。

なぜ本番稼働で IAM ロールセレクターを使用するのか:

  • 最小特権: 名前空間ごとに必要なアクセス許可のみを取得します。

  • チーム分離: チーム A が誤ってチーム B のアクセス許可を使用することがないようにします。

  • 容易な監査: どの名前空間がどのロールを使用するかを明確にマッピングします。

  • クロスアカウントサポート: 複数のアカウントのリソースを管理する場合に必要です。

  • 関心の分離: サービスや環境ごとに異なるロールを使用します。

基本的な IAM ロールセレクターのセットアップ

ステップ 1: サービス固有の IAM ロールを作成する

特定の AWS サービスに対するアクセス許可を付与した IAM ロールを作成します。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:*" ], "Resource": "*" } ] }

機能ロールに引き受けられるように信頼ポリシーを設定します。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/ACKCapabilityRole" }, "Action": "sts:AssumeRole" } ] }

ステップ 2: AssumeRole アクセス許可を機能ロールに付与する

サービス固有のロールを引き受けるためのアクセス許可を機能ロールに追加します。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::111122223333:role/ACK-S3-Role" } ] }

ステップ 3: IAMRoleSelector を作成する

名前空間に IAM ロールをマッピングします。

apiVersion: services.k8s.aws/v1alpha1 kind: IAMRoleSelector metadata: name: s3-namespace-config spec: arn: arn:aws:iam::111122223333:role/ACK-S3-Role namespaceSelector: names: - s3-resources

ステップ 4: マッピングした名前空間にリソースを作成する

s3-resources 名前空間内のリソースは、指定されたロールを自動的に使用します。

apiVersion: s3.services.k8s.aws/v1alpha1 kind: Bucket metadata: name: my-bucket namespace: s3-resources spec: name: my-production-bucket

マルチアカウント管理

IAM ロールセレクターを使用すると、複数の AWS アカウントのリソースを管理できます。

ステップ 1: クロスアカウント IAM ロールを作成する

ターゲットアカウント (444455556666) に、ソースアカウントの機能ロールを信頼するロールを作成します。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/ACKCapabilityRole" }, "Action": "sts:AssumeRole" } ] }

このロールにサービス固有のアクセス許可をアタッチします。

ステップ 2: AssumeRole アクセス許可を付与する

ソースアカウント (111122223333) で、機能ロールがターゲットアカウントロールを引き受けられるようにします。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::444455556666:role/ACKTargetAccountRole" } ] }

ステップ 3: IAMRoleSelector を作成する

名前空間にクロスアカウントロールをマッピングします。

apiVersion: services.k8s.aws/v1alpha1 kind: IAMRoleSelector metadata: name: production-account-config spec: arn: arn:aws:iam::444455556666:role/ACKTargetAccountRole namespaceSelector: names: - production

ステップ 4: リソースを作成する

production 名前空間内のリソースは、ターゲットアカウントに作成します。

apiVersion: s3.services.k8s.aws/v1alpha1 kind: Bucket metadata: name: my-bucket namespace: production spec: name: my-cross-account-bucket

高度な IAM ロールセレクターパターン

ラベルセレクターやリソース固有のロールマッピングなどの例に見られる高度な設定については、「ACK IRSA ドキュメント」を参照してください。

次のステップ