【AWS】Amazon ECR ~ 別アカウントからInspector2を操作するには ~

■ はじめに

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)公式ドキュメントの記述

https://docs.aws.amazon.com/ja_jp/AmazonECR/latest/userguide/image-scanning-enhanced.html#image-scanning-enhanced-iam

より抜粋
~~~~~~
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 CLIaws sts
https://dk521123.hatenablog.com/entry/2023/04/13/000000