このページの改善にご協力ください
このユーザーガイドに貢献するには、すべてのページの右側のペインにある「GitHub でこのページを編集する」リンクを選択してください。
ACK アクセス許可を設定する
自分の代わりに ACK で AWS リソースを作成および管理できるようにするには、IAM アクセス許可が必要です。このトピックでは、IAM が ACK でどのように機能するかを説明し、さまざまなユースケースに合わせてアクセス許可を設定する際のガイダンスを示します。
IAM は ACK でどのように機能するか
ACK は、IAM ロールを使用して AWS で認証し、リソースに対してアクションを実行します。ACK にアクセス許可を付与する方法が 2 つあります。
機能ロール: ACK 機能の作成時に指定する IAM ロールです。このロールは、デフォルトではすべての ACK オペレーションに使用されます。
IAM ロールセレクター: 特定の名前空間またはリソースにマッピングできる追加の IAM ロールです。これらのロールの範囲内にあるリソースの機能ロールは上書きされます。
リソースを作成または管理する必要があるときに、ACK はどの IAM ロールを使用するかを決定します。
-
IAMRoleSelector がリソースの名前空間に一致するかどうかを確認します。
-
一致した場合、その IAM ロールを引き受けます。
-
一致しない場合、機能ロールを使用します。
このアプローチにより、シンプルな単一ロールセットアップから複雑なマルチアカウントかつマルチチームの設定まで、アクセス許可を柔軟に管理できます。
使用開始: シンプルなアクセス許可セットアップ
開発、テスト、またはシンプルなユースケースの場合、必要なすべてのサービスアクセス許可を機能ロールに直接追加できます。
このアプローチは、次の場合に適しています。
-
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 ドキュメント
次のステップ
-
ACK の概念 - ACK の概念およびリソースライフサイクルを理解する
-
ACK の概念 - リソースの採用と削除ポリシーについて学ぶ
-
EKS 機能のセキュリティに関する考慮事項 - 機能のセキュリティベストプラクティスを理解する