この記事は公開されてから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 の更新については今回の手続きで可能です。ポリシーの絞り込みや付与の検証を素早くこなしたい時におすすめです。