aws-cliで効率よくIAMのポリシードキュメント更新を行ってみた

IAMポリシードキュメントの更新を管理コンソール上で行っていましたが、セッション切れによる操作やり直しが面倒になり、ターミナルでの更新手続きを調べてみました。
2020.02.27

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

role あるいは user に付与する Policy Document を管理コンソール上から毎回行っていましたが、編集時間超過によるセッション切れを起こしやすく、編集内容が保持されていないこともありました。

手早く手戻りなく行うために、ターミナル上からCLI経由で行う手順を固めてみました。

aws-cliによる更新手順

今回は以下の順番で行います。

  • 既存Policy Documentの取得
  • Policy Documentの更新
  • Policyの既定利用指定での作成

policy-arn (arn:aws:iam::000000000000:policy/<policy-name>)が必要になります。

既存Policy Documentの取得

aws iam get-policy-versionにて VersionId の指定が必要になるため、aws iam get-policy経由で取得しています。

aws iam get-policy-version \
  --policy-arn arn:aws:iam::000000000000:policy/<policy-name> \
  --version-id $(aws iam get-policy --policy-arn arn:aws:iam::000000000000:policy/<policy-name> | jq -r '.Policy.DefaultVersionId') | jq -r '.PolicyVersion.Document' > policy_document.json

出力結果にはDocumentのバージョン指定も含まれているため、ドキュメントのみに絞っています。

Policy Documentの更新

出力したJSONファイルを編集します。Syntaxミスの場合は次の手順実行にエラーとなります。

Policyの既定利用指定での作成

aws iam create-policy-versionにて Policy Document を渡しつつ、既定の使用とするために--set-as-defaultのフラグを追加します。

% aws iam create-policy-version \
    --policy-arn arn:aws:iam::000000000000:policy/<policy-name> \
    --policy-document file://$(pwd)/policy_document.json 
    --set-as-default

取得する時と異なり、VersionIdの指定は不要です。

Policyの新規作成時

上記手続きはあくまで既にPolicyが作られている前提となります。作成自体もターミナルにて行う場合は事前に Policy Document の用意が必要となります。以下はIAMのリスト出力については許可しているサンプルです。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "iam:List*"
            ],
            "Resource": "*"
        }
    ]
}

サンプルをdummy.jsonとして以下のコマンドを実施します。

% aws iam create-policy --policy-name test --policy-document file://$(pwd)/dummy.json
{
    "Policy": {
        "PolicyName": "test",
        "PermissionsBoundaryUsageCount": 0,
        "CreateDate": "2020-02-27T13:52:27Z",
        "AttachmentCount": 0,
        "IsAttachable": true,
        "PolicyId": "XXXXXXXXXXXXXXXXXX",
        "DefaultVersionId": "v1",
        "Path": "/",
        "Arn": "arn:aws:iam::000000000000:policy/test",
        "UpdateDate": "2020-02-27T13:52:27Z"
    }
}

更新用にArn(arn:aws:iam::000000000000:policy/test)を忘れずメモしておきます。

あとがき

aws iamには多くのサブコマンドがあり、名前からは使い方を想定し難かったりしますが、Policy Document の更新については今回の手続きで可能です。ポリシーの絞り込みや付与の検証を素早くこなしたい時におすすめです。