[アップデート] AWS CLIでAWS Artifactの操作が可能になりました

2024.02.20

しばたです。

私はAWS CLIのコマンドとAWS Tools for PowerShellのコマンドレットを比較表示するサイトを運営しているので定期的にAWS CLIの更新をチェックしているのですが、本日時点で最新のVer.2.15.21およびVer.1.32.43において

  • api-change:artifact: This is the initial SDK release for AWS Artifact. AWS Artifact provides on-demand access to compliance and third-party compliance reports. This release includes access to List and Get reports, along with their metadata. This release also includes access to AWS Artifact notifications settings.

と、ひっそりAWS Artifactのサポートが追加されているのを発見しました。

本記事ではこの更新について共有します。

更新内容について

AWS ArtifactはAWSに対する各種コンプライアンスレポートをオンデマンドでダウンロードするためのサービスです。

これまでは公開APIが提供されておらずマネジメントコンソールからのみアクセス可能でした。
去年末より権限まわりがきめ細かな権限(fine-grained permissions)に改善されるのを受け、今年に入り公開APIの追加とAWS CLIのコマンド追加に至った様です。

AWS CLIではaws artifactコマンドでいくつかの操作が可能です。

試してみた

ここからは簡単に動作確認していきます。
今回は私の個人用AWSアカウントを使います。AWS CLIのバージョンは最新のVer.2.15.21です。

PS C:\> aws --version
aws-cli/2.15.21 Python/3.11.6 Windows/10 exe/AMD64 prompt/off

リージョン指定

AWS Artifactはグローバルサービスのためエンドポイントはバージニア北部(us-east-1)となります。
デフォルトリージョンがバージニア北部でない場合--region us-east-1を指定やる必要があります。

aws artifact list-reports

aws artifact list-reportsコマンドで公開されているレポートの一覧を取得できます。

# レポートの一覧を取得
PS C:\> aws artifact list-reports --region us-east-1
{
    "reports": [
        {
            "arn": "arn:aws:artifact:us-east-1::report/report-8UIPaR1wmWheUaKS",
            "category": "Certifications and Attestations",
            "companyName": "AWS",
            "description": "This document is an Accessibility Conformance Report (ACR) based on the ITI VPAT® and is intended to provide information on the accessibility of the relevant AWS product or service. The VPAT references accessibility standards for information and communications technology including: Section 508 (U.S.), EN 301 549 (EU), and W3C/WAI WCAG.",
            "id": "report-8UIPaR1wmWheUaKS",
            "name": "Accessibility Conformance Report (VPAT) - AWS Identity and Access Management (IAM)",
            "periodStart": "2023-12-01T00:00:00+00:00",
            "productName": "AWS",
            "series": "ACR",
            "state": "PUBLISHED",
            "version": 1
        },
        // ・・・省略・・・
        {
            "arn": "arn:aws:artifact:us-east-1::report/report-xuFndDkYgjgvkYEc",
            "category": "Certifications and Attestations",
            "companyName": "AWS",
            "description": "This document is an Accessibility Conformance Report (ACR) based on the ITI VPAT® and is intended to provide information on the accessibility of the relevant AWS product or service. The VPAT references accessibility standards for information and communications technology including: Section 508 (U.S.), EN 301 549 (EU), and W3C/WAI WCAG.",
            "id": "report-xuFndDkYgjgvkYEc",
            "name": "ccessibility Conformance Report (VPAT) - AWS Secrets Manager",
            "periodStart": "2023-12-01T00:00:00+00:00",
            "productName": "AWS",
            "series": "ACR",
            "state": "PUBLISHED",
            "version": 1
        }
    ]
}

条件指定の専用パラメーターは無いため、絞り込みをしたい場合は--queryパラメーターで頑張ってやる必要があります。
たとえば「日本におけるAWSリージョンのレジリエンス」を検索する場合はこんな感じです。

PS C:\> aws artifact list-reports --query "reports[?name=='日本におけるAWSリージョンのレジリエンス']|[0]" --region us-east-1
{
    "arn": "arn:aws:artifact:us-east-1::report/report-g87fnPBB9F1JEfOd",
    "category": "Policies and Procedures",
    "companyName": "AWS",
    "description": "本ドキュメントは、地震災害への耐性を中心とした日本のリージョンにおけるレジリエンスを解説したホワイトペーパーとなります。",
    "id": "report-g87fnPBB9F1JEfOd",
    "name": "日本におけるAWSリージョンのレジリエンス",
    "periodStart": "2021-03-02T00:00:00+00:00",
    "productName": "AWS",
    "series": "Incident Response",
    "state": "PUBLISHED",
    "version": 1
}

なお、「日本におけるAWSリージョンのレジリエンス」自体についてはこちらをご覧ください。

aws artifact get-report-metadata

aws artifact get-report-metadataコマンドで各レポートのメタデータを取得できます。
--report-idパラメーターで対象のレポートを選びます。

前述の「日本におけるAWSリージョンのレジリエンス」(ID: report-g87fnPBB9F1JEfOd)の情報を取得するとこんな感じです。

PS C:\> aws artifact get-report-metadata --report-id report-g87fnPBB9F1JEfOd --region us-east-1
{
    "reportDetails": {
        "acceptanceType": "PASSTHROUGH",
        "arn": "arn:aws:artifact:us-east-1::report/report-g87fnPBB9F1JEfOd:1",
        "category": "Policies and Procedures",
        "companyName": "AWS",
        "createdAt": "2023-12-20T17:01:05.462000+00:00",
        "description": "本ドキュメントは、地震災害への耐性を中心とした日本のリージョンにおけるレジリエンスを解説したホワイトペーパーとなります。",
        "id": "report-g87fnPBB9F1JEfOd",
        "lastModifiedAt": "2023-12-20T22:02:44.811000+00:00",
        "name": "日本におけるAWSリージョンのレジリエンス",
        "periodStart": "2021-03-02T00:00:00+00:00",
        "productName": "AWS",
        "sequenceNumber": 4,
        "series": "Incident Response",
        "state": "PUBLISHED",
        "statusMessage": "File processing is complete.",
        "termArn": "arn:aws:artifact:us-east-1::term/term-yuTfz5Z19sOf4MJm:1",
        "uploadState": "COMPLETE",
        "version": 1
    }
}

aws artifact get-term-for-report

CLIからArtifactのレポートを取得する場合、事前に規約に同意する必要があります。
そのためにaws artifact get-term-for-reportコマンドを使います。

このコマンド実行すると規約が記載されたPDFファイルに対するURL(documentPresignedUrl)とレポートのダウンロードに使うトークン(termToken)を取得できます。

ドキュメント上明記されていないものの、レポートをダウンロードするために規約とトークンをセットにしている以上「トークンの利用=規約への同意」であると見做すべきでしょう。

# 日本におけるAWSリージョンのレジリエンス(report-g87fnPBB9F1JEfOd)の場合
PS C:\> aws artifact get-term-for-report --report-id report-g87fnPBB9F1JEfOd --region us-east-1
{
    "documentPresignedUrl": "https://artifact-assets-prod-us-east-1.s3.amazonaws.com/term/・・・(後略)・・・",
    "termToken": "term-token-xxxxxxxxxxxxxxxxxxxxxxx"
}

documentPresignedUrlはS3バケットに対するPre-signed URLの形で提供され、制限時間は899秒(約15分)となっていたので早めにダウンロードする様にしてください。
またtermTokenは実行の都度変わります。

aws artifact get-report

aws artifact get-reportコマンドを使うとレポートをダウンロードできます。
レポートIDと前述のトークンを合わせて指定することでドキュメントに対するPre-signed URLを取得できます。

PS C:\> aws artifact get-report --report-id report-g87fnPBB9F1JEfOd --term-token term-token-xxxxxxxxxxxxxxxxxxxxxxx --region us-east-1
{
    "documentPresignedUrl": "https://artifact-assets-prod-us-east-1.s3.amazonaws.com/report-token/・・・後略・・・"
}

こちらもPre-signed URLの制限時間は899秒だったので早めにダウンロードしておく必要があります。

補足 : 透かしの入り方

ちなみに、ダウンロードしたレポートには識別のための透かしが入っているのですが、マネジメントコンソールからダウンロードした場合とAWS CLIからダウンロードした場合で透かしの入りかたが少し異なっていました。

実際のレポートをお見せするわけにはいかないのでイメージ図を以下に紹介します。

AWS CLIを使った場合は透かしとしてトークンが紙面いっぱいに載る形になり、マネジメントコンソールからダウンロードした場合は何らかのGUIDが紙面を横切る形になっていました。

aws artifact put-account-settings

aws artifact put-account-settingsコマンドは通知設定にある「Artifact通知をサブスクライブ」の有効・無効を切り替えるコマンドです。

--notification-subscription-statuパラメーターをSUBSCRIBED(サブスクライブする)、NOT_SUBSCRIBED(サブスクライブしない)のどちらかで指定してやります。

# 設定例
PS C:\> aws artifact put-account-settings --notification-subscription-status SUBSCRIBED --region us-east-1
{
    "accountSettings": {
        "notificationSubscriptionStatus": "SUBSCRIBED"
    }
}

aws artifact get-account-settings

aws artifact get-account-settingsコマンドで現在の「Artifact通知をサブスクライブ」の状態を取得できます。

# サブスクライブしていない場合
PS C:\> aws artifact get-account-settings --region us-east-1
{
    "accountSettings": {
        "notificationSubscriptionStatus": "NOT_SUBSCRIBED"
    }
}

# サブスクライブしている場合
PS C:\> aws artifact get-account-settings --region us-east-1
{
    "accountSettings": {
        "notificationSubscriptionStatus": "SUBSCRIBED"
    }
}

最後に

以上となります。

AWS Artifactを利用することはあまり無いかもしれませんが、レポートの更新に合わせて取得を自動化したい場合に使えそうですね。