amareloのブログ(仮)

IT系勉強会で感じた想いや知見をメインに書いていきます。

JAWS-UG CLI専門支部 #160R IAM基礎(IAMポリシー) 参加レポート

6/25(木)、JAWS-UG CLI専門支部 #160R IAM基礎(IAMポリシー)に参加しました。今回もハンズオンの感想と学んだコマンドについて書きます。

目次

イベントページ

jawsug-cli.connpass.com

ハンズオンでやったこと

以下の通りです。事前準備として、Cloud9上にハンズオン環境を構築しました。 ハンズオンでは、Cloud9のターミナルでコマンド実行しました。

IAMロールとIAMポリシについて

IAMロールとは
  • IAMはSTSと密接に関係しており、STSが裏側で動いている。
  • IAMは公開されているAPIのほぼ全アクションを制御できる。
  • AWSサービスはAPIの集合体
    • AWSはすべての機能をAPIで提供している
  • IAMを知ることはAWSAPIアクションとの付き合い方を知ること

    • IAMを分からなければAWSのことをわかっていない
  • IAMロールはAWSリソース同士をつなぐもの

    • 認証情報が見た目上不要。ただし、STSが裏で動いており、期限付きのトークンが発生しているため、実際に認証が不要なわけではない。
      • ユーザが意識しなくても良いだけ。
  • リスクがIAMユーザ数に比例しやすい

    • リスク = IAMユーザ数 * ポリシの強さ
IAMポリシ
  • 管理ポリシ

    • カスタマー管理ポリシ
      • 利用者が作成して管理するポリシ
      • ポリシバージョンを保有
    • AWS管理ポリシ
      • AWS側にて管理するポリシ
      • そのためデフォルトしか使えないが常に最新版を使える
  • ユーザ、グループ、ロールにインラインポリシが作られる

    • インラインポリシとカスタマー管理ポリシに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 コマンドを実行します。
    • --scopeAWS管理ポリシ(AWS)を表示させるか、顧客管理ポリシ(Local)を表示させるか指定します。
    • --max-itemsでコマンドの出力で返すアイテムの総数を指定します。
    • --queryで、Policies JSON 内のPolicyNameが変数${IAM_POLICY_NAME}と等しいPolicyNameを返し、それに合致するものをテキスト形式で表示します。
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への理解を深めるために次回も参加します! 最後まで読んでいただき、ありがとうございました!

※次回のイベントページ

jawsug-cli.connpass.com