AWS CLI を開発、運用環境で利用している場合、特定作業に対する複数の IAM ポリシーをチェックするようなケースがあると思います。
ユーザ名、ロール名は見たら思い出せるけど、入力できるほどは覚えてない、という場合は、ユーザ名、ロール名のリスト出力、ポリシー確認を繰り返さないといけません。json ファイルなどから該当のリソース名、ARNなどを見つけて、次のコマンドを作成して、、、ということを繰り返すのは数が多いと大変な作業になります。
そこで以下のような一連の作業を効率的に実施するために、bash 等で使える alias を作成しています。alias名などをカスタマイズしてお使いください。
1.IAM ユーザ(またはロール、グループ)特定
2.紐づく IAM ポリシーの特定
3.IAM ポリシーの確認
前提
linux や mac os などで AWS CLI が利用できる、また jq がインストールされている事が前提です。以下のような記事を参照ください。
上記を含めて AWS CLI 利用のための alias を、以下の git にまとめています。実行環境などは、コードに記載しています。
alias
IAM ユーザ名から IAM ポリシーを特定した上で、IAM ポリシーの詳細を確認する。
alias awsEchoIAMPolicies2Users="aws iam list-users \
| jq -r '.Users[] | .Name' \
| sed 's/^/export IAM_USER=/' ;\
echo \
'aws iam list-attached-user-policies --username \${IAM_USER} \
| jq -r '\''.AttachedPolicies[] | .PolicyArn'\'' \
| sed '\''s/^/aws iam get-policy-version --version-id v1 --policy-arn /'\' "
IAM ロール名から IAM ポリシーを特定した上で、IAM ポリシーの詳細を確認する。
alias awsEchoIAMPolicies2Roles="aws iam list-roles \
| jq -r '.Roles[] | .RoleName' \
| sed 's/^/export IAM_ROLE=/' ;\
echo \
'aws iam list-attached-role-policies --role-name \${IAM_ROLE} \
| jq -r '\''.AttachedPolicies[] | .PolicyArn'\'' \
| sed '\''s/^/aws iam get-policy-version --version-id v1 --policy-arn /'\'"
IAM グループ名から IAM ポリシーを特定した上で、IAM ポリシーの詳細を確認する。
alias awsEchoIAMPolicies2Groups="aws iam list-groups \
| jq -r '.Groups[] | .GroupName' \
| sed 's/^/export IAM_Groups=/' ;\
echo \
'aws iam list-attached-group-policies --group-name \${IAM_Groups} \
| jq -r '\''.AttachedPolicies[] | .PolicyArn'\'' \
| sed '\''s/^/aws iam get-policy-version --version-id v1 --policy-arn /'\'"
利用方法
alias を実行すると、export IAM_USER=*** といった形でユーザ名やロール名がリストで出力されます。以下は、IAM ロール名からポリシーを出力する例です。
$ awsEchoIAMPolicies2Roles
export IAM_ROLE=AccessAnalyzerTrustedService
export IAM_ROLE=Admin
export IAM_ROLE=AwsSecurityAudit
:
~割愛~
aws iam list-attached-role-policies --role-name ${IAM_ROLE} | jq -r '.AttachedPolicies[] | .PolicyArn' | sed 's/^/aws iam get-policy-version --version-id v1 --policy-arn /'
一番下の行が、IAM ロールに紐づく IAM ポリシーをリスト出力するためのコマンドになっています。
まず確認したい IAM ロールの行をコピペすることで環境変数にセットします。ここでは、AwsSecurityAudit を選択します。
$ export IAM_ROLE=AwsSecurityAudit
先程、最終行に出力されていたコマンドをそのまま実行します。
$ aws iam list-attached-role-policies --role-name ${IAM_ROLE} | jq -r '.AttachedPolicies[] | .PolicyArn' | sed 's/^/aws iam get-policy-version --version-id v1 --policy-arn /'
aws iam get-policy-version --version-id v1 --policy-arn arn:aws:iam::aws:policy/SecurityAudit
この IAM ロールには1つのポリシーが紐づいているため、1行だけコマンドが出力されました( policy/SecurityAudit )。この出力はコピペをすると、そのままポリシー内容が確認できるようになっています。
$ aws iam get-policy-version --version-id v1 --policy-arn arn:aws:iam::aws:policy/SecurityAudit
{
"PolicyVersion": {
"Document": {
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"autoscaling:Describe*",
"cloudformation:DescribeStack*",
"cloudformation:GetTemplate",
"cloudformation:ListStack*",
"cloudfront:Get*",
"cloudfront:List*",
~割愛~
参考
- AWS CLI で扱える IAM 関連のコマンドは以下が参考になります。
- AWS IAM の基礎理解は、AWS 公式の Black Belt などを参照ください。
- [AWS Identity and Access Management (AWS IAM) Part1] (https://www.slideshare.net/AmazonWebServicesJapan/20190129-aws-black-belt-online-seminar-aws-identity-and-access-management-iam-part1)
- AWS Identity and Access Management (AWS IAM) Part2