AWS IAM Policyをawscliで作成・取得・更新
AWSのIAM Policyをawscliで取得、作成や更新をすることはできますが、以下の理由でとても手間です。
- Policyにバージョンの概念があるため、バージョン番号を確認するワンクッションが必要
- Policyの名前を指定する箇所とARNを指定する箇所があり分かりづらい上に、ARNの場合はコマンドラインがとても長くなりがち
これを簡略化するためのスクリプトを書きました。
IAM Policyを取得
aws-get-iam-policy
というファイル名の実行権限付きのファイルです。
#!/bin/bash set -Ceu set -o pipefail profile=default name= # スクリプトのコマンドラインパラメータを解釈 while [ "$#" != 0 ]; do case "$1" in --profile ) profile=$2 shift ;; * ) if [ -n "$name" ]; then echo "Option \`${1}\` is not supported." >&2 exit 1 fi name=$1 ;; esac shift done # IAM Policyを取得 account_id=$(aws --profile $profile --output json sts get-caller-identity | jq -r .'Account') arn="arn:aws:iam::${account_id}:policy/${name}" policy_version=$(aws --profile $profile --output json iam get-policy --policy-arn $arn | jq -r '.Policy.DefaultVersionId') aws --profile $profile --output json iam get-policy-version --policy-arn $arn --version-id $policy_version | jq -r '.PolicyVersion.Document'
実行例
$ aws-get-iam-policy --profile foo BarPolicy
IAM Policyを作成・更新
aws-put-iam-policy
というファイル名の実行権限付きのファイルです。
#!/bin/bash set -Ceu set -o pipefail profile=default name= # スクリプトのコマンドラインパラメータを解釈 while [ "$#" != 0 ]; do case "$1" in --profile ) profile=$2 shift ;; * ) if [ -n "$name" ]; then echo "Option \`${1}\` is not supported." >&2 exit 1 fi name=$1 ;; esac shift done # IAM Policyを作成・更新 account_id=$(aws --profile $profile --output json sts get-caller-identity | jq -r .'Account') arn="arn:aws:iam::${account_id}:policy/${name}" if aws --profile $profile --output json iam get-policy --policy-arn $arn >/dev/null 2>&1; then # 既存更新 aws --profile $profile iam create-policy-version --policy-arn $arn --policy-document file:///dev/stdin --set-as-default else # 新規作成 aws --profile $profile iam create-policy --policy-name $name --policy-document file:///dev/stdin fi
JSONのポリシードキュメントを標準入力から取り込みます。
実行例
$ aws-put-iam-policy --profile foo BarPolicy < policy.json
取得と更新をパイプでつなげばコピーもできます。
foo1
アカウントにある BarPolicy
ポリシーを foo2
アカウントに同名でコピー。
$ aws-get-iam-policy --profile foo1 BarPolicy | aws-put-iam-policy --profile foo2 BarPolicy
IAM Policyを更新 その2
ポリシードキュメントのJSONファイルをローカルに置かなくても、vipeコマンドを使えばポリシーをその場で編集できます。
$ aws-get-iam-policy BarPolicy | vipe | aws-put-iam-policy BarPolicy
vipeコマンドのインストールはUbuntuであれば以下のとおり。
$ sudo apt install -y moreutils
関連