ご覧頂き、ありがとうございます。
この記事を書いた理由
これまで以下のAWS資格を取得し、2024年12月から2社目のIT会社に転職成功。
今はAWSを活用したシステム構築の支援業務を行なっています。
本記事は、業務で行った内容の復習とアウトプットを兼ねて作成しました。
AWSの具体的な設定手順を学びたい方に少しでも役立てば幸いです。
既に合格済のAWS資格
2024年04月11日「AWS Certified Cloud Practitioner(CLF)」
2024年06月27日「AWS Certified Solutions Architect - Associate(SAA)」
2024年08月13日「AWS Certified Sysops Administrator - Associate (SysOps)」
2024年11月19日「AWS Certified Solutions Architect - Professional (SAP)」
この記事でわかること
▪️Amazon EC2で暗号化と複合化を行う際に使用するKMSキーポリシーの設定
▪️Amazon EC2の複合化時に使用するIAMパスロールのポリシーの設定
▪️IAMユーザーとIAMロールの権限設定に焦点を当てています
対象読者
▪️AWS資格試験の合格に向けて勉強中の方
▪️Amazon EC2の暗号化、複合化を学びたい方
ご注意
画像は設定手順をイメージしやすくするための参考です。
細部の仕様や正確性についてはAWS公式ドキュメントをご確認ください。
また、一部個人情報などを削除しています。
事前準備
▪️AWSマネージメントコンソールにはログイン済
▪️EC2の作成方法は周知済
▪️KMSキーの作成方法は周知済
▪️AWS backupでのバックアップ取得及び複合化方法は周知済
項番1_EC2復元は「成功」想定
▪️想定条件
▫️EC2暗号化時のキーポリシーにはroot指定
▫️EC2復元時のパスロールのポリシーはKMSアクション有り指定
結論:項番1_EC2復元は成功
▪️理由
復元時のIAMパスロールポリシーにKMSアクションが含まれており、
KMSキーを操作する権限(特にkms:Decrypt)が付与されていたため、
復元が成功しました。これにより制御主体はIAMポリシーと判明。
手順1 暗号化したEC2を作成する為のKMSキーの作成
{
"Id": "key-consolepolicy-3",
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Enable IAM User Permissions",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::(アカウントID):root"
},
"Action": "kms:*",
"Resource": "*"
}
]
}
キーポリシー解説
1行目: "Id": "key-consolepolicy-3",
→ これはポリシーの識別子です。ポリシーに名前を付けて管理しやすくしています。
2行目: "Version": "2012-10-17",
→ ポリシーのバージョンを指定します。これはAWSが定めた固定の形式です。
3~4行目:
"Statement": [
{
→ この部分からポリシーの具体的な設定内容を記述します。
Statementは、許可や制限のルールを定義するブロックです。
5行目: "Sid": "Enable IAM User Permissions",
→ これはこのルールの識別子(説明用の名前)です。
内容が何をするかを示す補足情報です。
6行目: "Effect": "Allow",
→ この設定が「許可(Allow)」なのか「拒否(Deny)」なのかを指定します。
ここでは許可を指定しています。
7行目:
"Principal": {
"AWS": "arn:aws:iam::(アカウントID):root"
}
→ どのユーザーまたはアカウントがこのポリシーの影響を受けるかを指定します。
"arn:aws:iam::(アカウントID):root"は、AWSアカウントのルートユーザーを意味します。
この設定で、このKMSキーに対してルートユーザーに許可を与えています。
8行目:
"Action": "kms:*",
→ このポリシーで許可する操作を指定します。
kms:"*"は「すべてのKMS関連の操作」を許可するという意味です。
例、暗号化や複合化、キーの管理などが含まれます。
9行目:
"Resource": "*"
→ ポリシーが適用されるリソースを指定します。
"*"は「すべてのリソース」を意味します。
この場合、KMSキーに対する操作を全般的に許可します。
10~12行目:
}
]
→ ポリシーのルールブロックを閉じる部分です。ここで設定が終了します。
手順3 AWS backupにてバックアップボールトを作成
ボールトに使用するKMSキーポリシー
{
"Id": "key-consolepolicy-3",
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Enable IAM User Permissions",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::(アカウントID):root"
},
"Action": "kms:*",
"Resource": "*"
}
]
}
キーポリシー解説
手順1のキーポリシーと重複するので割愛します。
手順4
バックアップボールトを使用し、オンデマンドバックアップを取得します。
手順5 バックアップボールトからの復元
使用するIAMパスロールのIAMポリシー
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowBackupService",
"Effect": "Allow",
"Action": [
"ec2:CreateVolume",
"ec2:AttachVolume",
"ec2:DescribeVolumes",
"ec2:DescribeInstances",
"ec2:CreateSnapshot",
"ec2:DeleteSnapshot",
"ec2:DetachVolume",
"ec2:DeleteVolume",
"ec2:DescribeImages",
"ec2:RunInstances",
"ec2:CreateTags"
],
"Resource": "*"
},
{
"Sid": "AllowKMSActions",
"Effect": "Allow",
"Action": "kms:*",
"Resource": "*"
},
{
"Sid": "PassRole",
"Effect": "Allow",
"Action": "iam:PassRole",
"Resource": "*"
}
]
}
パスロールのポリシー解説
全体の概要
このIAMポリシーは、バックアップボールトからEC2のデータを復元するために
必要な権限を定義しています。それはEC2のボリュームやインスタンスの操作、
KMSキーの使用、IAMロールの引き継ぎ(PassRole)を許可する内容になっています。
復元時に使うIAMロールにこのポリシーを割り当てることで、
復元に必要なAWSリソース操作が可能になります。
1行目:"Version": "2012-10-17",
→ このポリシーのバージョンを指定します。
2012-10-17 はAWSで使用される最新のバージョンです。
2~3行目:
"Statement": [
{
→ この部分からポリシーの具体的なルールを記述します。
Statement は許可や拒否の設定を定義するブロックです。
4行目:"Sid": "AllowBackupService",
→ このルールの識別子(名前)です。
復元に必要なバックアップ関連の操作を許可するルールであることを示しています。
5行目:"Effect": "Allow",
→ このルールが許可(Allow)を与えるものか、拒否(Deny)するものかを指定します。
この場合は許可を与えます。
6~19行目
→ ここでは許可する具体的なアクション(操作)をリストで指定しています。
ec2:CreateVolume:新しいEBSボリュームを作成する。
ec2:AttachVolume:EBSボリュームをEC2インスタンスにアタッチする。
ec2:DescribeVolumes:既存のボリュームを確認する。
ec2:DescribeInstances:インスタンスの詳細情報を取得する。
ec2:CreateSnapshot:ボリュームのスナップショットを作成する。
ec2:DeleteSnapshot:スナップショットを削除する。
ec2:DetachVolume:EBSボリュームをEC2インスタンスからデタッチする。
ec2:DeleteVolume:ボリュームを削除する。
ec2:DescribeImages:イメージ情報を確認する。
ec2:RunInstances:新しいインスタンスを起動する。
ec2:CreateTags:リソースにタグを付与する。
20行目:"Resource": "*"
→ このルールが適用されるリソースを指定します。
"*"は「すべてのリソース」を意味します。
21~23行目
},
{
"Sid": "AllowKMSActions",
→ 次のルールの識別子です。このルールはKMS関連の操作を許可します。
24~26行目
"Effect": "Allow":許可を与える設定。
"Action": "kms:":KMSのすべての操作(暗号化、復号化、キー管理など)を許可します。
"Resource": "":KMSキーのすべてのリソースに対して適用されます。
27~29行目
},
{
"Sid": "PassRole",
→ 次のルールの識別子です。
このルールはIAMロールを引き継ぐ権限(PassRole)を許可します。
30~32行目
"Effect": "Allow":許可を与える設定。
"Action": "iam:PassRole":IAMロールを他のAWSサービスに引き継ぐ操作を許可します。
"Resource": "*":すべてのIAMロールに対して適用されます。
33~35行目
}
]
→ ポリシーのルールブロックを閉じる部分です。
手順6
復元できた事を確認します。
項番1の備考
手順5 バックアップボールトからの復元時、24~26行目の
"Action": "kms:*"が付与されていない場合、
AWS Backupで取得した暗号化データを復号化することができません。
理由
KMSキーを使用して暗号化されたデータを復号化するには、
KMSの Decrypt アクションが必要です。
このアクションがIAMポリシーに含まれていない場合、
KMSキーへのアクセスが拒否され、復号化に失敗します。
その結果、バックアップボールトからのデータ復元も実行できません。
項番2_EC2復元は「成功」想定
▪️想定条件
▫️EC2暗号化時のキーポリシーの使用者はAWS backup デフォルトロール指定
▫️EC2復元時のパスロールのポリシーはKMSアクション無し
結論:項番2_EC2復元は成功
▪️理由
復元に必要なKMS操作権限がAWS Backupデフォルトロールのキーポリシーで付与されており、
AWS Backupがこのロールを使用して復号化を実行したため、復元が成功しました。
IAMパスロールポリシーにKMSアクションが含まれていなくても影響しませんでした。
これにより制御主体はキーポリシーと判明。
手順1 暗号化したEC2を作成する為のKMSキーの作成
▪️このポリシーは2つのルールを持っています。
▫️ルール1:特定のAWSアカウントのルートユーザーにKMSキーの管理を許可。
▫️ルール2:特定のIAMロールに、KMSキーを使用する事を許可。
{
"Version": "2012-10-17",
"Id": "key-policy",
"Statement": [
{
"Sid": "AllowAccessForKeyAdministrators",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::(アカウントID):root"
},
"Action": "kms:*",
"Resource": "*"
},
{
"Sid": "AllowRootAccount",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::(アカウントID):role/(ロール名A)"
},
"Action": "kms:*",
"Resource": "*"
}
]
}
キーポリシー解説
1行目: "Version": "2012-10-17",
→ ポリシーのバージョンを指定しています。
"2012-10-17"はAWSで使用される最新バージョンの形式です。
2行目: "Id": "key-policy",
→ このポリシーの識別子です。ポリシーを管理しやすくするための名前を付けています。
3行目: "Statement": [
→ ここから具体的な許可や拒否のルール(ステートメント)を記述します。
4行目: {
→ 最初のルール(ステートメント)が始まります。
ルール1
5行目: "Sid": "AllowAccessForKeyAdministrators",
→ このルールの識別子(名前)です。
ここでは「キー管理者にアクセスを許可する」という内容を示しています。
6行目: "Effect": "Allow",
→ このルールが「許可(Allow)」なのか「拒否(Deny)」なのかを指定します。
この場合は「許可」です。
7~9行目:
"Principal": {
"AWS": "arn:aws:iam::(アカウントID):root"
}
→ このポリシーが適用されるユーザーやロールを指定します。
"AWS": このポリシーが適用される対象を指定します。
"arn:aws:iam::(アカウントID):root": ここでは、
特定のAWSアカウントのルートユーザーに許可を与えています。
10行目: "Action": "kms:*",
→ 許可する操作(アクション)を指定します。
"kms:*"は、KMSに関連するすべての操作を許可する設定です。
11行目: "Resource": "*"
→ このルールが適用されるリソースを指定します。
"*"は「すべてのリソース」を意味します。
12行目: },
→ 最初のルール(ステートメント)の終了を示します。
ルール2
13行目: {
→ 2つ目のルールが始まります。**
14行目: "Sid": "AllowRootAccount",
→ このルールの識別子(名前)です。
ここでは「特定のロールにアクセスを許可する」という内容を示しています。
15行目: "Effect": "Allow",
→ このルールが「許可(Allow)」であることを示します。
16~18行目:
"Principal": {
"AWS": "arn:aws:iam::(アカウントID):role/(ロール名A)"
}
→ このポリシーが適用される対象を指定します。
"AWS": このポリシーが適用される対象を指定します。
"arn:aws:iam::(アカウントID):role/(ロール名)":
ここでは、特定のIAMロールに許可を与え ています。
19行目: "Action": "kms:*",
→ 許可する操作(アクション)を指定します。
"kms:*"は、KMSに関連するすべての操作を許可する設定です。
20行目: "Resource": "*"
→ このルールが適用されるリソースを指定します。
"*"は「すべてのリソース」を意味します。
21行目: }
→ 2つ目のルール(ステートメント)の終了を示します。
手順3 AWS backupにてバックアップボールトを作成
項番1_手順3と同様なのでキーポリシーは割愛します。
手順4
バックアップボールトを使用し、オンデマンドバックアップを取得します。
手順5 バックアップボールトからの復元
使用するIAMパスロールのIAMポリシー
注意
EC2復元時のパスロールのポリシーはKMSアクション無し
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowBackupService",
"Effect": "Allow",
"Action": [
"ec2:CreateVolume",
"ec2:AttachVolume",
"ec2:DescribeVolumes",
"ec2:DescribeInstances",
"ec2:CreateSnapshot",
"ec2:DeleteSnapshot",
"ec2:DetachVolume",
"ec2:DeleteVolume",
"ec2:DescribeImages",
"ec2:RunInstances",
"ec2:CreateTags"
],
"Resource": "*"
},
{
"Sid": "PassRole",
"Effect": "Allow",
"Action": "iam:PassRole",
"Resource": "*"
}
]
}
手順6
復元できた事を確認します。
項番2の備考
16~18行目:
"Principal": {
"AWS": "arn:aws:iam::(アカウントID):role/(ロール名A)"
}
手順1で設定したPrincipalに記載されたロール名Aを実在する別のロール名Bに
変更した場合、復号化リクエストが失敗します。
理由
KMSキーポリシーに指定されたロールは、
そのキーを使用して暗号化および復号化を行うための明示的な権限を持つ必要があります。
具体的には、AWS Backupがデータ復元時に利用するIAMロール(例、ロール名B)が、
KMSキーを操作するための適切な権限(例:kms:Decrypt)を持たなければ、復号化が拒否されます。