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
関連