6/25(木)、JAWS-UG CLI専門支部 #160R IAM基礎(IAMポリシー)に参加しました。今回もハンズオンの感想と学んだコマンドについて書きます。
目次
イベントページ
ハンズオンでやったこと
以下の通りです。事前準備として、Cloud9上にハンズオン環境を構築しました。 ハンズオンでは、Cloud9のターミナルでコマンド実行しました。
IAMロールとIAMポリシについて
IAMロールとは
- IAMはSTSと密接に関係しており、STSが裏側で動いている。
- IAMは公開されているAPIのほぼ全アクションを制御できる。
- AWSサービスはAPIの集合体
IAMを知ることはAWSのAPIアクションとの付き合い方を知ること
- IAMを分からなければAWSのことをわかっていない
IAMロールはAWSリソース同士をつなぐもの
リスクがIAMユーザ数に比例しやすい
- リスク = IAMユーザ数 * ポリシの強さ
IAMポリシ
管理ポリシ
ユーザ、グループ、ロールにインラインポリシが作られる
- インラインポリシとカスタマー管理ポリシにIAMポリシドキュメントが配信される
- インラインポリシは個別に更新する(CLIと相性が良いのはこちら?)
- インラインポリシは共有利用しない
- バージョン管理をIAMの外部でやる
IAMポリシドキュメント
- 基本はアクションとリソースの組み合わせ
- リソースにはARNを使う
- Effectの優先順位
- 優先順位1:明示的な拒否
- 優先順位2:明示的な許可
- 優先順位3:デフォルト暗黙の拒否
感想
先に今回の感想を書きます。
前回と今回のハンズオンを通して、IAMに対する理解が深まったような気がします。 インラインポリシについては、今回のハンズオンで、ユーザごとグループごと個別に付与するポリシであることをようやく認識しました(合ってますかね??)。 正直SAAやプラクティショナーの勉強の時は、ちゃんと理解していなかったです。今思うと、良く受かったもんだ…
また、今回ポリシドキュメントは事前に準備されたもののため、何が書かれているかの理解は不十分だと思います。 今回は追いついていませんが、ポリシドキュメントに書かれていることの意味(優先順位、制御するサービスなど)、記述方法も深掘りしたいです。 JMESPathについても、ハンズオンのコマンドで返される結果は何となくわかりますが、どう書けば何をフィルタ出来るのかは理解不十分です。 文法、活用方法をもっと深堀りしたくなりました。チュートリアル読みながら、地道に勉強していくしかないですね(汗)
事前作業・ハンズオン手順
こちらを参照してください。
ハンズオンで学んだコマンド
1.IAMポリシーの作成
- IAMポリシの作成には、
iam create-policy
コマンドを実行します。--policy-name
で作成するポリシ名を指定します。--policy-document
であらかじめ作成したポリシドキュメント(ポリシ設定を記述したファイル)を指定します。
aws iam create-policy \ --policy-name ${IAM_POLICY_NAME} \ --policy-document file://${FILE_IAM_POLICY_DOC}
- IAMポリシを表示させるためには、
iam list-policies
コマンドを実行します。
aws iam list-policies \ --scope Local \ --max-items 1000 \ --query "Policies[?PolicyName == \`${IAM_POLICY_NAME}\`].PolicyName" \ --output text
2. IAMグループのポリシアタッチ
iam attach-group-policy
でIAMグループにポリシをアタッチします。--group-name
でポリシをアタッチするグループ名を指定します。--policy-arn
でアタッチするポリシのARN(Amazon Resource Name)を指定します。
aws iam attach-group-policy \ --group-name ${IAM_GROUP_NAME} \ --policy-arn ${IAM_POLICY_ARN}
- グループに指定のポリシがアタッチされたことを
iam list-attached-group-policies
で確認します。--group-name
でグループ名を指定します。--query
でアタッチしたポリシ名を抽出し、それに合致するものがあればテキスト形式で表示します。
aws iam list-attached-group-policies \ --group-name ${IAM_GROUP_NAME} \ --query "AttachedPolicies[?PolicyName == \`${IAM_POLICY_NAME}\`].PolicyName" \ --output text
3.IAMポリシーバージョンの作成
iam create-policy-version
で新しいバージョンを作成します。--policy-arn
で新しいバージョンを作成するポリシのARNを指定します。--policy-document
であらかじめ作成したポリシドキュメントを指定します。
aws iam create-policy-version \ --policy-arn ${IAM_POLICY_ARN} \ --policy-document file://${FILE_IAM_POLICY_DOC}
iam list-policy-versions
で新しいバージョンが作成されたか確認します。--policy-arn
で新しいバージョンを作成したポリシのARNを指定します。
aws iam list-policy-versions \ --policy-arn ${IAM_POLICY_ARN} \ --query "max_by(Versions[], &CreateDate).VersionId" \ --output text
4. IAMポリシーのデフォルトバージョン変更
新しいバージョンを作成しただけではデフォルトバージョンにはなりません。 以下のコマンドでデフォルトバージョンに指定する必要があります。
iam set-default-policy-version
でデフォルトポリシーバージョンに変更します。--policy-arn
でポリシのARNを指定します。--version-id
でバージョンIDを指定します。
aws iam set-default-policy-version \ --policy-arn ${IAM_POLICY_ARN} \ --version-id ${IAM_POLICY_VERSION_ID}
iam list-policy-versions
でポリシのバージョンを確認します。--policy-arn
でポリシのARNを指定します。- Versions JSON でデフォルトバージョンが
true
になっているバージョンのIDを抽出し、テキスト形式で表示します。
aws iam list-policy-versions \ --policy-arn ${IAM_POLICY_ARN} \ --query "Versions[?IsDefaultVersion == \`true\` ].VersionId" \ --output text
5.IAMポリシーバージョンの削除
IAMポリシの古いバージョンを削除します。
iam delete-policy-version
でIAMポリシのバージョンを削除します。--policy-arn
でバージョンを削除するポリシを指定します。--version-id
で削除するポリシのバージョンを指定します(v1 など)。
aws iam delete-policy-version \ --policy-arn ${IAM_POLICY_ARN} \ --version-id ${IAM_POLICY_VERSION_ID}
6.IAMグループのポリシーデタッチ
iam detach-group-policy
でIAMグループからポリシをデタッチします。--group-name
でポリシデタッチするグループ名を指定します。--policy-arn
でデタッチするポリシのARNを指定します。
aws iam detach-group-policy \ --group-name ${IAM_GROUP_NAME} \ --policy-arn ${IAM_POLICY_ARN}
7.IAMポリシーの削除
iam delete-policy
でポリシを削除します。--policy-arn
で削除するポリシのARNを指定します。
aws iam delete-policy \ --policy-arn ${IAM_POLICY_ARN}
8.IAMグループのインラインポリシー作成
iam put-group-policy
でインラインポリシを作成します。
aws iam put-group-policy \ --group-name ${IAM_GROUP_NAME} \ --policy-name ${IAM_GROUP_POLICY_NAME} \ --policy-document file://${FILE_IAM_POLICY_DOC}
iam list-group-policies
でグループポリシが作成されたことを作成します。--group-name
でグループ名を指定します。
aws iam list-group-policies \ --group-name ${IAM_GROUP_NAME}\ --query "PolicyNames[?contains(@,\`${IAM_GROUP_POLICY_NAME}\`)]"\ --output text
9.IAMグループのインラインポリシー削除
iam delete-group-policy
でインライングループポリシを削除します。--group-name
でインラインポリシを削除するグループ名を指定します。--policy-name
でインラインポリシ名を指定します。
aws iam delete-group-policy \ --group-name ${IAM_GROUP_NAME} \ --policy-name ${IAM_GROUP_POLICY_NAME}
10.IAMユーザーのインラインポリシー作成
iam put-user-policy
でIAMユーザにインラインポリシを作成します。--user-name
でユーザ名を指定します。--policy-name
でインラインポリシ名を指定します。--policy-document
であらかじめ作成したポリシファイルを指定します。
aws iam put-user-policy \ --user-name ${IAM_USER_NAME} \ --policy-name ${IAM_USER_POLICY_NAME} \ --policy-document file://${FILE_IAM_POLICY_DOC}
iam list-user-policies
でユーザにインラインポリシが作成されたことを確認します。--user-name
でユーザ名を指定します。- PolicyNames JSON 内に変数${IAM_USER_POLICY_NAME}が含まれるポリシ名がある場合は、それをテキスト形式で表示します。
aws iam list-user-policies \ --user-name ${IAM_USER_NAME}\ --query "PolicyNames[?contains(@,\`${IAM_USER_POLICY_NAME}\`)]"\ --output text
11.IAMユーザーのインラインポリシー削除
iam detele-user-policy
でユーザのインラインポリシを削除します。--user-name
でインラインポリシを削除するユーザ名を指定します。--policy-name
でインラインポリシ名を指定します。
aws iam delete-user-policy \ --user-name ${IAM_USER_NAME} \ --policy-name ${IAM_USER_POLICY_NAME}
12.後始末
ハンズオン環境が不要になったら、ハンズオン手順の後始末以降の手順を実施します。
※前回の後片付けと実行するコマンドは同じなため、割愛します。
最後に
次回はIAMロールについてです。さらにIAMの理解、CLIへの理解を深めるために次回も参加します! 最後まで読んでいただき、ありがとうございました!
※次回のイベントページ