Table of Contents
課題
自己学習している中でところどころIAMの用語が出てきたときに、「あれこれなんだっけ?」となることがあるため、今回はその不明点について理解を深めていきたいと思います。
IAMユーザー/ポリシーを深堀する内容
- そもそもIAMユーザーとは
- IAMユーザーを作成できる権限とは何か
- AWS マネージドポリシーとは
- IAMアイデンティティとは
そもそもIAMユーザーとは
IAMユーザーだけでは、魂の抜け殻で、ポリシーをアタッチすることで初めて効果を発揮できます。
IAMユーザーを作る意図は、[どんなユーザー]、[誰が]を使用しているかを判別するために作成するもの、と自分の中で考えています。
[どんなユーザー]- dev-user (開発環境)
- stg-user (検証環境)
- prod-user (本番環境)
などと分けておくことで、環境を分けてどんなユーザーを使用しているのかがわかります。
ただ、個人で開発する場合には上記3つでも事足りるかもしれませんが、チーム開発する場合はこの3つでは足りません。
IAMユーザーを複数人で共有していると、[操作ログ]を確認する際に困難になります。
AWSではCloudTrailでAWS上の操作ログを取得しています。
以下の図を見ていただくとわかりますが、誰が、いつ、何に対して、何をしたか?の操作ログをすべて記録しています。
先ほどの分け方をすると、この[誰が]の部分が明確化できなくなってしまいます。
チームで開発する場合には、利用者ごとにIAMユーザーを発行をする必要があります。
- dev-user-A
- dev-user-B
などとしておけば[誰が]の部分は明確化できるでしょう。
IAMユーザーを作成できる権限は何か
普段はAWS管理ポリシー名AdministratorAccess
権限を使用しているため、意識せずともIAMユーザーを追加することができてしまいます。
AdministratorAccess
は以下の許可ポリシーがアタッチされています。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "*",
"Resource": "*"
}
]
}
結論: このポリシーはIAMユーザーの作成をすることは可能です。
フルアクセス権限のため、AWSサービスおよびリソースへのアクションを許可します。
PowerUserAccessはどうか
結論: IAMユーザーを作成することはできません。
その他、AWS Organizations、AWS Account Managementなどのアクションも許可されていません。
ポリシーの説明:
このポリシーの最初のステートメントでは、NotAction 要素を使用して、すべての AWS のサービスのすべてのアクションと、すべてのリソース (AWS Identity and Access Management、AWS Organizations、AWS Account Management を除く) のすべてのアクションを許可します。
https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/reference_policies_elements_notaction.html
このNotAction
とは [許可しないもの]を定義しています。
以下はAWS管理ポリシーPowerUserAccess
ポリシーの一部を抜粋したものです。
"NotAction"
で
"iam:*"
,
"organizations:*"
,
"account:*"
上記を指定しているため、結論で申し上げたようにIAMユーザーの作成をすることを許していません。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"NotAction": [
"iam:*",
"organizations:*",
"account:*"
],
"Resource": "*"
},
AWS管理ポリシー PowerUserAccess
全体は以下
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"NotAction": [
"iam:*",
"organizations:*",
"account:*"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"iam:CreateServiceLinkedRole",
"iam:DeleteServiceLinkedRole",
"iam:ListRoles",
"organizations:DescribeOrganization",
"account:ListRegions",
"account:GetAccountInformation"
],
"Resource": "*"
}
]
}
ではどうすれば、IAMユーザーを発行できるようになるのか?
同じように考えているdevelopsers io
の記事がありました。
こちらの記事を参考にどんなAction
の記載が必要なのかを確認してみたいと思います。
IAMの管理者権限と仮定してiam-administrator
というIAMユーザーを作成しました。
このIAMユーザーに土台となるポリシーとしてPoserUserAccess
を使用します。
対象のIAMユーザーを選択し、[許可タブ] を選択、[許可を追加] → [インラインポリシーを作成]を選択します。
[アクセス許可の指定画面]で[JSON]を選択します。ポリシーエディタに対してPowerUserAccess
をコピペします。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"NotAction": [
"iam:*",
"organizations:*",
"account:*"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"iam:CreateServiceLinkedRole",
"iam:DeleteServiceLinkedRole",
"iam:ListRoles",
"organizations:DescribeOrganization",
"account:ListRegions",
"account:GetAccountInformation"
],
"Resource": "*"
}
]
}
CreateUserを追加してみる
"iam:CreateUser"
を追加してIAMユーザーが作成できるか確認してみます。
結果はこんな感じです。
以下のアクションが足らないようです。
AWS公式のサービス許可リファレンスから内容を確認してみました。
GetAccountSummary
: AWS アカウント 内での IAM エンティティの使用状況と IAM クォータに関する情報を取得するアクセス許可を付与
ListMFADevices
: IAM ユーザーの MFA デバイスを一覧表示する許可を付与
ListAccessKeys
: 指定の IAM ユーザーに関連付けられたアクセスキー ID に関する情報を一覧表示する許可を付与
ListUsers
: 指定されたパスのプレフィックスを持つ IAM ユーザーを一覧表示する許可を付与
本来適切なポリシーがアタッチされていれば、以下のような画面が表示される想定ですが、それらを許可していないがために、上記のよう[アクセス拒否]メッセージを表示しているようです。
ダッシュボード画面
IAMユーザー画面
では、これらのポリシーを追加していきましょう。
これで[変更を保存]します。
以下のアカウントでログインし、ダッシュボードを確認すると、エラーは消えました。
ただ、この状態でもまだポリシーは足りません。
- ポリシーの一覧が見れない
- ポリシーのアタッチができない
- アクセスキーの作成ができない
これらを解消するため以下のポリシーを追加します。
iam:ListPolicies
iam:AttachUserPolicy
iam:CreateAccessKey
また、ListUsers
のポリシーのみではIAMユーザーの一覧のみしか表示できないため、アタッチしたポリシーやアクセスキーなどが確認できないため以下のポリシーを追加します。
iam:ListAccessKeys
iam:ListAttachedUserPolicies
iam:GetUser
iam:GetPolicyVersion
iam:ListUserPolicies
iam:ListGroupsForUser
iam:ListGroups
iam:GetLoginProfile
iam:GetUserPolicy
iam:GetRole
iam:ListAttachedRolePolicies
iam:ListRolePolicies
結果的に追加ポリシーは以下となりました。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"NotAction": [
"iam:*",
"organizations:*",
"account:*"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"iam:CreateUser",
"iam:CreateAccessKey",
"iam:GetAccountSummary",
"iam:ListMFADevices",
"iam:ListAccessKeys",
"iam:ListUsers",
"iam:ListPolicies",
"iam:AttachUserPolicy",
"iam:ListAccessKeys",
"iam:ListAttachedUserPolicies",
"iam:GetUser",
"iam:GetPolicyVersion",
"iam:ListUserPolicies",
"iam:ListGroupsForUser",
"iam:GetLoginProfile",
"iam:GetUserPolicy",
"iam:ListGroups",
"iam:CreateServiceLinkedRole",
"iam:DeleteServiceLinkedRole",
"iam:ListRoles",
"iam:GetRole",
"iam:ListAttachedRolePolicies",
"iam:ListRolePolicies",
"organizations:DescribeOrganization",
"account:ListRegions",
"account:GetAccountInformation"
],
"Resource": "*"
}
]
}
上記までの設定でIAMユーザー (ポリシー、ロール参照)を作成するインラインポリシーの作成はできました。
ただ、このポリシーでは以下ができません。
- インラインポリシーの作成変更ができない (PubUserPolicyの付与が必要)
- ロールの作成ができない (PutRolePolicyの付与が必要)
上記操作を行う場合には( )内に記載したポリシーを付与する必要があります。
AWSマネージドポリシーとは
AWSマネージドポリシー = AWS管理ポリシー であることがAWS公式ドキュメントを読むことでわかりました。
マネージド ポリシー (Managed Policy) = 管理ポリシー
AWSマネージドポリシーはAWS管理ポリシーのことであり、なおかつAWS管理ポリシーとはその名の通りAWSが管理するポリシーのため、意図してユーザーがこのポリシーの内容を変更することはできません。
IAMアイデンティティとは
IAMアイデンティティを理解するには以下をセットで理解しておくと良いです。
- IAMリソース
- IAMアイデンティティ
- IAMエンティティ
- プリンシパル
IAMリソース | IAMで管理するもの全て AMユーザー、グループ、ロール、ポリシーなどを指す |
IAMアイデンティティ | 権限付与の対象となるリソース IAMユーザー、グループ、ロールなどを指す |
IAMエンティティ | AWSの認証の実体 IAMユーザー、ロールなどを指す |
プリンシパル | AWSリソース操作を委任されたユーザーまたはロール |
まとめ
IAM、IAMポリシーについて疑問に思っていた点、特にIAMユーザーを作成できる権限を重点的に深ぼってみました。
IAMユーザーを作成できる権限
という名目で記事を書いてみましたが、IAMユーザーのみならず、ポリシー、ロール、グループなどIAM
を管理する上で必要なこと、として検証した記事となりました。
結論、IAMを管理する上で必要なポリシーを追加していくのは一筋縄ではいかないことがわかりました。
AWS管理ポリシーで、IAM管理者ポリシーがあればそれに越したことはないですが、現状はそういったポリシー自体はないようです。