LoginSignup
2
0

More than 1 year has passed since last update.

IAMロールについて

Posted at

はじめに

SAAを取得してCLIの勉強の為にconnpassのJAWS-UG CLI専門支部に参加して、CLIもIAMも全く理解出来ていなかった為、復習とアウトプットの為に記事にする事にしました。
アウトプット慣れしていない事やそもそも学歴がないので変な文章・間違った知識がある場合はご指摘は歓迎します。

私のスペック

SESでエンジニア歴1年ほど、それまでは6年ほど営業職
JsとC#で開発経験・インフラ経験は無し
SAAは取得済み

IAMロールとは

IAMとはAWSリソースへのアクセスを管理するための認証認可を制御するサービスです。

その中でロールはAWSサービスやアプリケーションなどのエンティティからAWSリソースを操作する権限を付与することができる機能です。

ここでいう認証は「誰に」認可は「何を許可/禁止」
と考えてもらえればわかりやすいです。
そしてロールは「誰に」の部分を制御し、ポリシーは「何を許可/禁止」する部分です。

ポリシーをロールにアタッチをし
そのロールをアタッチすることでポリシーで定義した権限を与えることができます。

Assumeロール・信頼ポリシー

ロールを作成する際に信頼ポリシーと言う「誰を」信頼するかを
json形式で定義したファイルが必要になります。
以下の様なのが例です。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": "sts:AssumeRole", 
            "Effect": "Allow",
            "Principal": {
                "Service": "ec2.amazonaws.com" //ec2を信頼する
            }
        }
    ]
}

ここではPrincipalとはAWSリソースへのアクセスを許可するエンティティを指定します。
この場合ec2を許可している事になります。
またアカウントIDを指定してアカウントを信頼することでもできます。

また、sts:AssumeRoleは一時的なセキュリティ認証情報のstsが裏側で作成されています。
CLIやGUIでAWSリソースやサービスを操作するにはアクセスキー、シークレットアクセスキーを使いアクセスしますが、ロールをアタッチする事によりこのAssumeRoleがアクセスキー・シークレットアクセスキー・セッショントークンを与えてくれます。

インスタンスプロファイル

では実際にロールを作ってみようと思った矢先に大事な物を必要です。
それがインスタンスプロファイルです。

ずっとコンソールで操作をしているだけだった私は初めて聞いたとき何それとコンソール上のどこにも無いと戸惑いました。
このインスタンスプロファイルはCLIでロールを作成する際に出てくる大事な箱です。

箱と言っても何の箱と?と思うかもしれませんが
ec2インスタンスとIAMロールを結び助けるための箱です。

コンソール上ではわからないのですがec2にロールをアタッチする際に「IAMロールを選択」
と表示されているプルダウンがありますよね?
そこに表示されているのがインスタンスプロファイルです。
実は裏側ではロールはec2に直接結ばれているのではなく
インスタンスプロファイルを通して 結ばれています。

IAMポリシーの作成

ここから実際にポリシーを作成していきます。

ポリシー名を指定
IAM_POLICY_NAME='AmazonEC2FullAccess'
IAMポリシーARNを取得
IAM_POLICY_ARN=$( \
  aws iam list-policies \
    --scope AWS \
    --max-items 1000 \
    --query "Policies[?PolicyName==\`${IAM_POLICY_NAME}\`].Arn" \
    --output text \
) \
  && echo "${IAM_POLICY_ARN}"

以下結果

arn:aws:iam::aws:policy/AmazonEC2FullAccess

IAMロールの作成

ロールの利用を許可するサービス(ホスト名形式)を指定
IAM_ROLE_PRINCIPAL='ec2.amazonaws.com'
信頼ポリシードキュメント用ディレクトリを指定
DIR_IAM_ROLE_DOC="${HOME}/environment/conf-handson-cli-iam-novice"
信頼ポリシードキュメント名を指定
IAM_ROLE_DOC_NAME='handson-cli-iam-novice-role'
信頼ポリシードキュメントのファイル名を指定
FILE_IAM_ROLE_DOC="${DIR_IAM_ROLE_DOC}/${IAM_ROLE_DOC_NAME}.json" \
  && echo ${FILE_IAM_ROLE_DOC}

// ${HOME}/environment/conf-handson-cli-iam-novice/handson-cli-iam-novice-role.json
信頼ポリシードキュメントを作成
cat << EOF > ${FILE_IAM_ROLE_DOC}
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": "sts:AssumeRole",
      "Principal": {
        "Service": "${IAM_ROLE_PRINCIPAL}"
      },
      "Effect": "Allow",
      "Sid": ""
    }
  ]
}
EOF

cat ${FILE_IAM_ROLE_DOC}

以下結果

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": "sts:AssumeRole",
      "Principal": {
        "Service": "ec2.amazonaws.com"
      },
      "Effect": "Allow",
      "Sid": ""
    }
  ]
}

IAMロールの作成

IAMロール名を指定
IAM_ROLE_NAME='handson-cli-iam-role'
IAMロール名を作成
aws iam create-role \
  --role-name ${IAM_ROLE_NAME} \
  --assume-role-policy-document file://${FILE_IAM_ROLE_DOC}

以下結果

{
    "Role": {
        "AssumeRolePolicyDocument": {
            "Version": "2012-10-17", 
            "Statement": [
                {
                    "Action": "sts:AssumeRole", 
                    "Sid": "", 
                    "Effect": "Allow", 
                    "Principal": {
                        "Service": "ec2.amazonaws.com"
                    }
                }
            ]
        }, 
        "RoleId": "AROAUM3FYFHAKSSC6HKUX", 
        "CreateDate": "2022-05-08T13:20:49Z", 
        "RoleName": "handson-cli-iam-role", 
        "Path": "/", 
        "Arn": "arn:aws:iam::302471719360:role/handson-cli-iam-role"
    }
}
作成したロールにポリシーをアタッチ
aws iam attach-role-policy \
  --role-name ${IAM_ROLE_NAME} \
  --policy-arn ${IAM_POLICY_ARN}
// 出力無し

終わりに

まだまだわからない事だらけです
そしてIAMは奥が深い

参考

AWS公式ドキュメント
AWSサービス資料1
AWSサービス資料2
クラスメソッドさんのDevelopersIO

2
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0