AWS IAM@AWSリソース¶
はじめに¶
本サイトにつきまして、以下をご認識のほど宜しくお願いいたします。
01. AWS IAMとは:Identify and Access Management¶
AWSリソースへのアクセスに関する認証/認可を制御する。
認証はアクセスキーIDとシークレットアクセスキーによって、また認可はAWS IAMロール/AWS IAMポリシー/AWS IAMステートメントによって制御される。
02. AWS IAMロール¶
AWS IAMロールとは¶
AWS IAMポリシーのセットを定義する。
サービスリンクロール¶
AWSリソースを作成した時に自動的に作成されるロール。
他には紐付けできない専用のポリシーが紐付けられている。
『AWSServiceRoleFor*****
』という名前で自動的に作成される。
特に設定せずとも、自動的にリソースに紐付けられる。
関連するリソースを削除するまで、ロール自体できない。
サービスリンクロールの一覧については、以下のリンクを参考にせよ。
クロスアカウントのアクセスロール¶
記入中...
プロバイダのアクセスロール¶
記入中...
03. AWS IAMポリシー¶
アイデンティティベースのポリシー¶
▼ アイデンティティベースのポリシーとは¶
AWS IAMユーザー、AWS IAMグループ、AWS IAMロール、に紐付けるためのポリシーのこと。
▼ AWS管理ポリシー¶
AWSが提供しているポリシーのこと。
紐付け式のポリシーのため、すでに紐付けられていても、他のものにも紐付けできる。
▼ カスタマー管理ポリシー¶
ユーザーが作成したポリシーのこと。
すでに紐付けられていても、他のものにも紐付けできる。
▼ インラインポリシー¶
単一のアイデンティティに紐付けるためのポリシーのこと。
組み込み式のポリシーのため、アイデンティティ間で共有して紐付けできない。
*実装例*
AWS IAMロールにインラインポリシーを紐付ける。
このロールを持つユーザーは、ユーザーアカウントのすべての ACMのSSL証明書を一覧表示できるようになる。
{
"Version": "2012-10-17",
"Statement":
[{"Effect": "Allow", "Action": "acm:ListCertificates", "Resource": "*"}],
}
*実装例*
AWS IAMロールにインラインポリシーを紐付ける。
このロールを持つユーザーは、全てのAWSリソースに、任意のアクションを実行できる。
{
"Version": "2012-10-17",
"Statement": [{"Effect": "Allow", "Action": "*", "Resource": "*"}],
}
リソースベースのインラインポリシー¶
▼ リソースベースのインラインポリシーとは¶
単一のAWSリソースにインポリシーのこと。
すでに紐付けられていると、他のものには紐付けできない。
*例*
以下に、EC2の読み出しのみ認可スコープ (AmazonEC2ReadOnlyAccess
) を紐付けできるポリシーを示す。
このAWS IAMポリシーには、他のAWSリソースに対する認可スコープも含まれている。
{
"Version": "2012-10-17",
"Statement":
[
{"Effect": "Allow", "Action": "ec2:Describe*", "Resource": "*"},
{
"Effect": "Allow",
"Action": "elasticloadbalancing:Describe*",
"Resource": "*",
},
{
"Effect": "Allow",
"Action":
[
"cloudwatch:ListMetrics",
"cloudwatch:GetMetricStatistics",
"cloudwatch:Describe*",
],
"Resource": "*",
},
{"Effect": "Allow", "Action": "autoscaling:Describe*", "Resource": "*"},
],
}
▼ バケットポリシー¶
S3に紐付けられる、自身へのアクセスを制御するためのインラインポリシーのこと。
▼ ライフサイクルポリシー¶
AWS ECRに紐付けられる、コンテナイメージの有効期間を定義するポリシー。
コンソール画面から入力できるため、基本的にポリシーの実装は不要であるが、IaCツール (例:Terraform) では必要になる。
*実装例*
{
"rules":
[
{
"rulePriority": 1,
"description": "Keep last 10 images untagged",
"selection":
{
"tagStatus": "untagged",
"countType": "imageCountMoreThan",
"countNumber": 10,
},
"action": {"type": "expire"},
},
{
"rulePriority": 2,
"description": "Keep last 10 images any",
"selection":
{
"tagStatus": "any",
"countType": "imageCountMoreThan",
"countNumber": 10,
},
"action": {"type": "expire"},
},
],
}
▼ 信頼ポリシー¶
ロールに紐付けられる、Assume Roleを実行するためのインラインポリシーのこと。
*実装例*
例えば、以下の信頼ポリシーを任意のロールに紐付けしたとする。その場合、Principal
のecs-tasks
が信頼されたエンティティと見なされ、ECSタスクにロールを紐付けできるようになる。
{
"Version": "2012-10-17",
"Statement":
[
{
"Effect": "Allow",
"Principal": {"Service": "ecs-tasks.amazonaws.com"},
"Action": "sts:AssumeRole",
},
],
}
信頼ポリシーでは、AWS IAMユーザーを信頼されたエンティティとして設定もできる。
*実装例*
例えば、以下の信頼ポリシーを任意のロールに紐付けしたとする。
その場合、Principal
のAWS IAMユーザーが信頼されたエンティティと見なされ、ロールを紐付けできるようになる。
{
"Version": "2012-10-17",
"Statement":
[
{
"Effect": "Allow",
"Principal":
{"AWS": "arn:aws:iam::<AWSアカウントID>:user/<ユーザー名>"},
"Action": "sts:AssumeRole",
"Condition": {
# 完全一致
"StringEquals": {"sts:ExternalId": "<適当な文字列>"},
},
},
],
}
アクセスコントロールポリシー¶
json
形式で定義する必要が無いポリシーのこと。
03-02. AWS IAMポリシーの構造¶
構造¶
{
# Sid
"Sid": "foo",
# Version
"Version": "2012-10-17",
# Statement (AWS IAMステートメント)
"Statement": [
{
# 許可する
"Effect": "Allow",
# SSMのAPIへのGetParametersのコールを指定する
"Action": ["ssm:GetParameters"],
# 任意のAWSソースを対象とする
"Resource": "*",
},
],
}
Sid¶
任意の一意な文字列を設定する。
空文字でも良い。
Version¶
記入中...
Statement (AWS IAMステートメント)¶
▼ Statementとは¶
AWSリソースに関する認可のスコープを定義する。
▼ Effect¶
許可/拒否を設定する。
▼ Action¶
指定したAWSリソースのAPIに対するコールを設定する。
以下に主要なアクションを示す。
アクション名 | 説明 |
---|---|
Create | リソースを作成する。 |
Describe | リソースを表示する。 |
Delete | リソースを削除する。 |
Get | リソースを取得する。 |
Put | リソースを上書きする。 |
▼ Resource¶
アクションの実行対象に選択できるリソースを設定する。
ARNでAWSリソースの識別子を設定する。
リージョンのグループには、aws
、aws-cn
(中国系ネットワーク) 、aws-cn
(政府系ネットワーク) 、がある。
{
"Version": "2012-10-17",
"Statement":
[
{
"Resource": "arn:<リージョンのグループ>:<AWSリソース>:ap-northeast-1:<AWSアカウントID>:<AWSリソースID>",
},
],
}
▼ Condition¶
信頼されたエンティティの設定でよく使用する。
AWS IAMポリシーの取得に使用する文字列の条件の厳格さを設定する。
{
"Version": "2012-10-17",
"Statement":
[
{
"Effect": "Allow",
"Principal":
{"AWS": "arn:aws:iam::<AWSアカウントID>:user/<ユーザー名>"},
"Action": "sts:AssumeRole",
"Condition": {
# 完全一致
"StringEqual": {"sts:ExternalId": "foo"},
},
},
],
}
{
"Version": "2012-10-17",
"Statement":
[
{
"Effect": "Allow",
"Principal":
{"AWS": "arn:aws:iam::<AWSアカウントID>:user/<ユーザー名>"},
"Action": "sts:AssumeRole",
"Condition": {
# OR条件
"StringEqual": {
# リスト型にすることでOR上限になる
"sts:ExternalId": ["foo", "bar"],
},
},
},
],
}
{
"Version": "2012-10-17",
"Statement":
[
{
"Effect": "Allow",
"Principal":
{"AWS": "arn:aws:iam::<AWSアカウントID>:user/<ユーザー名>"},
"Action": "sts:AssumeRole",
"Condition": {
# 部分一致 (ワイルドカードを使用できる)
"StringLike": {"sts:ExternalId": "foo-*"},
},
},
],
}
タグを条件として使用することもできる。
{"Version": "2012-10-17", "Statement": [
{
"Effect": "Allow",
# EC2を起動する
"Action": "ec2:RunInstances",
"Resource": "arn:aws:ec2:*:account-id:launch-template/*",
"Condition": {
# 特定のタグを持つ起動テンプレートのみを指定できる
"StringEquals": {"ec2:ResourceTag/foo": "foo"},
},
},
]}
03-03. AWS IAMポリシーを紐付けできる対象¶
AWS IAMユーザーに対する紐付け¶
AWS IAMグループに対する紐付け¶
AWS IAMロールに対する紐付け¶
04. ルートユーザー、AWS IAMユーザー¶
ルートユーザーとは¶
全ての認可スコープをもったアカウントのこと。
AWS IAMユーザーとは¶
特定の認可スコープをもったアカウントのこと。
05. AWS IAMグループ¶
AWS IAMグループとは¶
AWS IAMユーザーをグループ化したもの。
AWS IAMグループごとにAWS IAMロールを紐付けすれば、AWS IAMユーザーのAWS IAMロールを管理しやすくなる。
AWS IAMグループへのAWS IAMロールの紐付け¶
AWS IAMグループに対して、AWS IAMロールを紐付ける。
そのAWS IAMグループに対して、AWS IAMロールを紐付けしたいAWS IAMユーザーを追加していく。
グループ一覧¶
グループ名 | 説明 | 補足 |
---|---|---|
Administrator | 全てのリソースに認可スコープがある。 | |
PowerUserAccess | AWS IAMのみが参照の認可スコープであり、それ以外のAWSリソースに変更の認可スコープがある。 | |
ViewOnlyAccess | 参照のみの認可スコープがある。 |