元ネタ
AWSのWell-Architected Frameworkを改めて整理。せっかくなんでハンズオン形式で学べるAWS Well-Architected Labsをやってみよう!ということで、備忘も兼ねて実践&記録をしてみました。
Workshop Studio
Discover and participate in AWS workshops and GameDays
前提条件
- AWSアカウントがあること
- AWS アカウントのロールを引き受けることができる、MFA が有効になっている IAM ユーザー。
MFAはベストプラクティスとして有効にしてあるが、このハンズオンのためにはマストではないと思う。
ハンズオン開始
0. 概要
これは、開発者に対して制限(権限境界)を持たせたロール作成ポリシーを持つロールを与えるためのハンズオンです。これにより、制限(権限境界)を超えることなく、ロールとポリシーを作成するための権限を委任できます。
手順としては、制限(権限境界)を持たせたポリシー(今回はリージョンを制限する)を作成した後に、以下2つのポリシーが適用された開発者ロールを作成します。
- createrole-restrict-region-boundary
- 以下3つの権限が設定されています。(ポリシー、ロール共にapp1というプレフィックスが強制される)
- ポリシーが作成、削除できる権限
- 制限(権限境界)を設定したポリシーを含めたロールを作成できる権限
- ロールにポリシーが適用できる権限
- 以下3つの権限が設定されています。(ポリシー、ロール共にapp1というプレフィックスが強制される)
- iam-restricted-list-read
- IAMサービスに対してリスト及び読み取りが適用されたポリシーです。
この開発者ロールを使用して作成したロールが、リージョン制限によるエラーが発生するところまでを確認します。
1. 権限境界のポリシーを作成する
us-east-1 (北バージニア) および us-west-1 (北カリフォルニア) リージョンのみを許可した、権限境界のためのポリシーを作成します。
ポリシー作成手順
- IAMよりポリシーを開く。
- 「ポリシーの作成」をクリックし、「ポリシーエディタ」より「JSON」タブを選択する。
- 以下を貼り付ける。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "EC2RestrictRegion",
"Effect": "Allow",
"Action": "ec2:*",
"Resource": "*",
"Condition": {
"StringEquals": {
"aws:RequestedRegion": [
"us-east-1",
"us-west-1"
]
}
}
},
{
"Sid": "LambdaRestrictRegion",
"Effect": "Allow",
"Action": "lambda:*",
"Resource": "*",
"Condition": {
"StringEquals": {
"aws:RequestedRegion": [
"us-east-1",
"us-west-1"
]
}
}
}
]
}
- 「次へ」を選択する。
- 「ポリシー名」にrestrict-region-boundaryと入力し、「ポリシーの作成」を選択する。
2. 開発者ロールに適用するポリシーを作成する
「1. 権限境界のポリシーを作成する」で作成したポリシーを持つロールが作成できるポリシーを作成します。また、名前付きプリフィックスも適用することで複数アプリケーションでの識別を容易にします。
ポリシー作成手順
- IAMよりポリシーを開く。
- 「ポリシーの作成」をクリックし、「ポリシーエディタ」より「JSON」タブを選択する。
- 以下を貼り付ける。([アカウントID]の部分を5ヶ所置き換えてください。)
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "CreatePolicy",
"Effect": "Allow",
"Action": [
"iam:CreatePolicy",
"iam:CreatePolicyVersion",
"iam:DeletePolicyVersion"
],
"Resource": "arn:aws:iam::[アカウントID]:policy/app1*"
},
{
"Sid": "CreateRole",
"Effect": "Allow",
"Action": [
"iam:CreateRole"
],
"Resource": "arn:aws:iam::[アカウントID]:role/app1*",
"Condition": {
"StringEquals": {
"iam:PermissionsBoundary": "arn:aws:iam::[アカウントID]:policy/restrict-region-boundary"
}
}
},
{
"Sid": "AttachDetachRolePolicy",
"Effect": "Allow",
"Action": [
"iam:DetachRolePolicy",
"iam:AttachRolePolicy"
],
"Resource": "arn:aws:iam::[アカウントID]:role/app1*",
"Condition": {
"ArnEquals": {
"iam:PolicyARN": [
"arn:aws:iam::[アカウントID]:policy/*",
"arn:aws:iam::aws:policy/*"
]
}
}
}
]
}
- 「次へ」を選択する。
- 「ポリシー名」にcreaterole-restrict-region-boundaryと入力し、「ポリシーの作成」を選択する。
3. 開発IAMコンソールアクセスポリシーを作成する
このハンズオンの要件ではありませんが、確認のために、IAMサービスへのリスト及び読み取り権限を持つポリシーを作成します。
ポリシー作成手順
- IAMよりポリシーを開く。
- 「ポリシーの作成」をクリックし、「ポリシーエディタ」より「JSON」タブを選択する。
- 以下を貼り付ける。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Get",
"Effect": "Allow",
"Action": [
"iam:ListPolicies",
"iam:GetRole",
"iam:GetPolicyVersion",
"iam:ListRoleTags",
"iam:GetPolicy",
"iam:ListPolicyVersions",
"iam:ListAttachedRolePolicies",
"iam:ListRoles",
"iam:ListRolePolicies",
"iam:GetRolePolicy"
],
"Resource": "*"
}
]
}
- 「次へ」を選択する。
- 「ポリシー名」にiam-restricted-list-readと入力し、「ポリシーの作成」を選択する。
4. 開発者ロールの作成
権限境界と名前付けプレフィックスが適用された、ロールとポリシーを作成する権限を持つ開発者用のロールを作成します。
作成手順
- IAMよりロールを開く。
- 「ロールの作成」を選択する。
- 「信頼されたエンティティタイプ」で「AWS account」を選択する。
- 「AWSアカウント」で「別のアカウントID」を選択し、アカウントIDを入力する。
オプションではベストプラクティスに従い、「MFAが必要」にチェックを入れる。 - 「次へ」を選択する。
- 「許可ポリシー」の検索枠に「createrole」を入力し、createrole-restrict-region-boundaryポリシーの横にあるチェックボックスをオンにする。
- 更に「許可ポリシー」の検索枠に「iam-res」を入力し、iam-restricted-list-readポリシーの横にあるチェックボックスをオンにして、「次へ」を選択する。
- 「ロールの詳細」の「ロール名」に「developer-restricted-iam」と入力し、「ロールを作成」を選択する。
5. 開発者ロールへの切り替え
開発者ロールにロールの切り替えを行います。
ロールの切り替え手順
- IAMのロールにてdeveloper-restricted-iamを検索し、詳細画面を開く。
- 「概要」の右側にある「コンソールでロールを切り替えるためのリンク」のリンクをコピーする。
- 右上のナビゲーションバーでユーザー名をクリックする。
- 2.でコピーしたリンクをブラウザに貼り付ける。
- 「ロールの切り替え」画面で、「アカウント」にアカウントID、「ロール」に「developer-restricted-iam」が入力されていることを確認し、「ロールの切り替え」を選択する。
- 右上のナビゲーションバーの名前の表示が「developer-restricted-iam@アカウントID」となっていることを確認する。
6. ユーザーロールの作成
開発者ロールのままで、制限(権限境界)付のユーザーロールを作成します。
ユーザーロールの作成手順
- 右上のナビゲーションバーの名前の表示が「developer-restricted-iam@アカウントID」となっていることを確認する。
- IAMコンソールを開く。(権限が制限されているため、複数のアクセス拒否が表示されるのが正しい。)
- 「ロール」より「ロールの作成」を選択する。
- 「信頼されたエンティティタイプ」で「AWS account」を選択する。
- 「AWSアカウント」で「別のアカウントID」を選択し、アカウントIDを入力する。
オプションではベストプラクティスに従い、「MFAが必要」にチェックを入れる。 - 「次へ」を選択する。
- 「許可ポリシー」の検索枠に「EC2Full」と入力し、AmazonEC2FullAccessポリシーの横にあるチェックボックスをオンにする。
- 更に「許可ポリシー」の検索枠に「AWSLambda」を入力し、AWSLambda_FullAccessまたはAWSLambdaFullAccessポリシーの横にあるチェックボックスをオンにする。
- 「許可の境界を設定」にて「許可の境界を使用して、最大ロール許可を制御」を選択し、検索枠に「boundary」と入力し、「restrict-region-boundary」のラジオボタンを選択する。
- 「次へ」を選択する。
- 「ロールの詳細」の「ロール名」に「app1-user-region-restricted-services」を入力し、「ロールを作成」を選択する。
7. ユーザーロールへの切り替えと確認
ユーザーロールへロールの切り替えを行い、制限(権限境界)が有効であることを確認します。
ユーザーロールへの切り替え手順
- IAMのロールにてapp1-user-region-restricted-servicesを検索し、詳細画面を開く。
- 「概要」の右側にある「コンソールでロールを切り替えるためのリンク」のリンクをコピーする。
- 右上のナビゲーションバーでユーザー名をクリックする。
- 「スイッチバック」を選択する。これで元のユーザーに戻る。
- 2.でコピーしたリンクをブラウザに貼り付ける。
- 「ロールの切り替え」画面で、「アカウント」にアカウントID、「ロール」に「app1-user-region-restricted-services」が入力されていることを確認する。
- 更に「色」から「developer-restricted-iam」へのロール切り替え時と異なる色を選択する。
選択しない場合、上書きされる。 - 「ロールの切り替え」を選択する。
- 右上のナビゲーションバーの名前の表示が「app1-user-region-restricted-services@アカウントID」となっていることを確認する。
- EC2管理コンソールに移動する。
- リージョン制限があることから、「リソース」にある「ロードバランサー」にてAPIエラーが発生することを確認する。
- 更に右上のナビゲーションバーにて、us-east-1、us-west-1以外のリージョンを選択した場合、更にAPIエラーが増えることを確認する。
- 11.、12.の結果より制限が有効であることが確認できる。