■ はじめに
https://dk521123.hatenablog.com/entry/2024/05/14/232934
の続き。 アカウントA(Account ID: 111111111111)から、 別 アカウントB(Account ID: 999999999999)のECRリポジトリを 自動スキャン付きにした場合の影響について、触れてみる
目次
【0】今回の問題点 1)必要なこと 【1】ToDo1:アカウントAのIAMロールへ権限付与 【2】ToDo2:委任管理者付与および関連付け 1)設定手順概要 2)別案「assume role」を利用する 【3】ToDo3:ECRリポジトリへの権限付与
【0】今回の問題点
https://dk521123.hatenablog.com/entry/2024/05/14/232934
で、アカウントA(Account ID: 111111111111)から、 別 アカウントB(Account ID: 999999999999)のECRリポジトリ(自動スキャン付)に対して Docker Pull/Pushすることは成功し、自動スキャンも実行されたのだが アカウントA から自動スキャンの状況および結果をモニタリングするため AWS CLI の aws ecr wait image-scan-complete などを使って 監視しようと考えているのだが、実行した際に以下のエラーになる
エラーメッセージ
An error occurred (AccessDeniedException): User: arn:aws:sts:111111111111:assumed-role/your-role/i-xxxx is not authorized to perform: inspector2:ListCoverage on resource: arn:aws:inspector2:us-west-2:111111111111:/coverage/list
1)必要なこと
[1] アカウントAのIAMロールへ適切な権限付与 => 「【1】ToDo1:アカウントAのIAMロールへ権限付与」参照 [2] アカウントAの委任管理者付与およびアカウントBの関連付け => 「【2】ToDo2:委任管理者付与および関連付け」参照 [3] アカウントBのECRリポジトリにアカウントAのロールの権限付与 => 「【3】ToDo3:ECRリポジトリへの権限付与」参照
【1】ToDo1:アカウントAのIAMロールへ権限付与
ECR拡張スキャンを利用する際は、ECR関連のアクションに加えて inspector2関連のアクション実行に関する権限が必要。 そのため、コマンド実行するアカウントAのIAMロールに対して、 inspector2関連のアクション実行権限を適切に付与する必要がある
1)公式ドキュメントの記述
より抜粋 ~~~~~~ Amazon ECR 拡張スキャンには、 Amazon Inspector サービスにリンクされた IAM ロールが必要です。 ・・・略;;; 詳細については、Amazon Inspector ユーザーガイドの Amazon Inspector でのサービスにリンクされたロールの使用 を参照してください。 次の IAM ポリシーは、拡張スキャンの有効化と使用に必要なアクセス許可を付与します。 これには、Amazon Inspector がサービスにリンクされた IAM ロールを作成するために 必要なアクセス許可、および拡張スキャンをオンまたはオフにして、 およびスキャン結果の取得に必要な Amazon Inspector API のアクセス許可が含まれます。 ~~~~~~
必要な IAM 許可
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "inspector2:Enable", "inspector2:Disable", "inspector2:ListFindings", "inspector2:ListAccountPermissions", "inspector2:ListCoverage" ], "Resource": "*" }, { "Effect": "Allow", "Action": "iam:CreateServiceLinkedRole", "Resource": "*", "Condition": { "StringEquals": { "iam:AWSServiceName": [ "inspector2.amazonaws.com" ] } } } ] }
補足:『"Resource": "*"』について
上記「必要な IAM 許可」のおいて、『"Resource": "*"』になっているが、 これは、以下の公式ドキュメントに
https://docs.aws.amazon.com/ja_jp/service-authorization/latest/reference/list_amazoninspector2.html
より抜粋 ~~~~~~~~~ [アクション] テーブルの [リソースタイプ] 列は、 各アクションがリソースレベルの許可をサポートしているかどうかを示します。 この列に値がない場合は、ポリシーステートメントの Resource 要素で、 ポリシーが適用されるすべてのリソース (「*」) を指定する必要があります。 ~~~~~~~~~
公式ドキュメントの表
* 公式ドキュメントの表を必要な部分だけ抜粋 => 必要となる全アクションの [リソースタイプ] 列に値がないので、 上記ドキュメント通り『ポリシーステートメントの Resource 要素で、 ポリシーが適用されるすべてのリソース (「*」) を指定する必要があります』
アクション | 説明 | アクセスレベル | リソースタイプ (* 必須) | 条件キー | 依存アクション |
---|---|---|---|---|---|
Enable | 新しい Amazon Inspector アカウントの設定を有効にして指定するためのアクセス許可を付与 | 書き込み | |||
Disable | Amazon Inspector アカウントを無効にするアクセス許可を付与 | 書き込み | |||
ListFindings | 1 つ以上の結果に関する情報のサブセットを取得する許可を付与 | リスト | |||
ListAccountPermissions | 組織内の Amazon Inspector アカウントに関連付けられている機能設定アクセス許可を取得するアクセス許可を付与 | リスト | |||
ListCoverage | Amazon Inspector がリソースインスペクターモニターに対して生成できる統計情報のタイプを取得する権限を付与 | リスト |
【2】ToDo2:委任管理者付与および関連付け
アカウントAがInspectorの委任管理者アカウントに指定されており、 アカウントBがInspectorのメンバーアカウントとして関連づけられている必要がある
1)設定手順概要
[1] AWS アカウント全体の一元管理するためのAWS Organizations(組織)の管理アカウントより アカウントAをInspectorの委任管理者アカウントに指定する => AWS Organizations 管理アカウント でログインが必要(詳細は以下のドキュメント参照)
https://docs.aws.amazon.com/ja_jp/inspector/latest/user/designating-admin.html#delegated-admin-proc
[2] アカウントAの Inspector画面の「アカウント管理」画面で アカウントBが表示されていることを確認する [3] アカウントBのチェックボックスを選択し、 アクティブ化からECRスキャンを有効化する。 [4] ステータスが Disassociated から Activated に変更されることを確認する
https://docs.aws.amazon.com/ja_jp/inspector/latest/user/adding-member-accounts.html
2)別案「assume role」を利用する
既に別の Inspector委任管理者アカウントを指定されているなどがある場合 別の回避策として、 アカウントAのIAMロールから、アカウントBのIAMロールを一時的に引き受けて(assume) AWS CLIコマンドするようにする なお、AWS CLI を使用して IAM ロールを引き受ける方法については、 以下の公式サイトを参照のこと
https://repost.aws/ja/knowledge-center/iam-assume-role-cli
https://www.youtube.com/watch?v=xeET-P4v9wE
【3】ToDo3:ECRリポジトリへの権限付与
以下の関連記事の 「【2】ECR側のAWS環境設定 - ECRリポジトリポリシー設定」を参照
Amazon ECR ~ 別アカウントのECRにPull/Push ~
https://dk521123.hatenablog.com/entry/2024/05/14/232934
関連記事
Amazon ECR ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2020/05/22/165711
Amazon ECR ~ 基本編 ~
https://dk521123.hatenablog.com/entry/2020/05/26/142645
Amazon ECR ~ AWS CLI ~
https://dk521123.hatenablog.com/entry/2024/01/05/000000
Amazon ECR ~ boto3 ~
https://dk521123.hatenablog.com/entry/2024/01/31/014010
Amazon ECR ~ Dockerイメージを Pull & Push ~
https://dk521123.hatenablog.com/entry/2023/12/02/024631
Amazon ECR ~ 別アカウントのECRにPull/Push ~
https://dk521123.hatenablog.com/entry/2024/05/14/232934
Amazon ECR ~ AWS ECR Public Gallery ~
https://dk521123.hatenablog.com/entry/2024/04/09/141310
Amazon ECR ~ AWS ECR Public Gallery ~
https://dk521123.hatenablog.com/entry/2024/04/08/184035
Amazon ECR ~ 脆弱性診断 / Amazon Inspector ~
https://dk521123.hatenablog.com/entry/2024/01/22/210831
Terraform ~ AWS ECR ~
https://dk521123.hatenablog.com/entry/2023/05/23/002314
Amazon ECR でのトラブルシューティング
https://dk521123.hatenablog.com/entry/2020/05/24/000000
IAM ~ Service-Linked Roles ~
https://dk521123.hatenablog.com/entry/2023/01/22/000000
シェルで split するには
https://dk521123.hatenablog.com/entry/2021/09/02/000000
IAM ~ クロスアカウント ~
https://dk521123.hatenablog.com/entry/2022/05/23/000000
AWS CLI ~ aws sts ~
https://dk521123.hatenablog.com/entry/2023/04/13/000000