今回は、AWS ConfigをAWS Organizationsと連携させるときの初期セットアップ手順について説明します。
AWS Configは前回に紹介したAWS CloudTrailと併せて設定をすることが多いサービスではないでしょうか。対応しているAWSリソースの変更管理などの目的で利用されている方が多いかと思います。AWS ConfigはAWS Organizationsと連携させることで組織アグリゲーターと呼ばれるAWS Organizations配下のすべてのAWSアカウントのリソース変更イベントなどを集約できます。
この組織アグリゲーターのセットアップ手順について紹介します。
想定する構成
前回と同じくセキュリティアカウントとログアーカイブアカウント構成でのセットアップとします。今回の記事では複数のAWSアカウントにまたがった設定を行いますので、補足を追加しています。
委任管理者アカウントの設定
Configの委任管理者はCloudTrailと異なり、マネジメントコンソール上での設定ができません。加えてCloudTrail時には必須ではなかった「信頼されたアクセス」を明示的に有効化する必要があります(CloudTrailでは組織の証跡を作成する際に自動的に信頼されたアクセスが有効化される挙動でした。)
(1)委任管理者アカウントの設定は、管理アカウントでのみ実施が可能ですので、まず管理アカウントにログインを行い、Organizationsの画面へ遷移します
(2)サイドメニューから「サービス」をクリックします。
(3)Configを見つけ、クリックします。
(4)「信頼されたアクセスを有効にする」をクリックします。
(5)表示されたポップアップで下記のように入力を行い、「信頼されたアクセスを有効にする」ボタンをクリックします。
(6)ステータスが変更されていることを確認します。
(7)CloudShellなどのAWSコマンドが実行できる環境から、下記コマンドを実行し、委任管理者を指定します。
aws organizations register-delegated-administrator --account-id ${委任管理者アカウントID} --service-principal config.amazonaws.com
aws organizations register-delegated-administrator --account-id ${委任管理者アカウントID} --service-principal config-multiaccountsetup.amazo
(8)以下コマンドで正しく設定がされたことを確認します
aws organizations list-delegated-services-for-account --account-id ${委任管理者アカウントID}
セキュリティアカウントの設定(1)
CloudTrailと同じく、Configも顧客管理キー(以下、CMK)によるS3バケットの暗号化を実施します。S3を作成する前に作業をする必要があります。
KMSの設定
S3バケット暗号化用のCMKのアクセス制御は大きく2つの方針があります。本来であれば、Configから書き込みかつ自組織からのアクセスのみを許可するという設定としたいのですが、aws:PrincipalOrgIDの条件とサービスプリンシパル(Principalがconfig.amazonaws.com)を両方指定したアクセス制限ができないため、どちらからのアクセス制御を選択する必要があります。
それぞれのメリットとデメリットは下表のとおりです。それほど組織内のAWSアカウントが多くない場合は、サービスプリンシパルでのアクセス制限を選択し、AWSアカウントが多い場合(もしくは増えていくことが想定される場合)は、aws:PrincipalOrgID条件を選択いただくことになるかと思います
サービスプリンシパルでのアクセス制限 | aws:PrincipalOrgIDでのアクセス制限 | |
メリット | 厳密にConfigからのアクセスのみに限定できる | AWSアカウントの増減があってもキーポリシーの変更が不要である |
デメリット | AWSアカウントの増減があった場合にキーポリシーの変更が必要である | Config以外のサービスからのアクセスも許可される |
今回の手順では、前者のキーポリシーを紹介します。
キーポリシーは下記が必要最低限となります。案件状況に応じて適宜権限の追加をご検討ください。
{
"Version": "2012-10-17",
"Id": "key-policy",
"Statement": [
{
"Sid": "Enable IAM User Permissions For Security Account",
"Effect": "Allow",
"Principal": {
"AWS": [
"arn:aws:iam::セキュリティアカウントのID:root"
]
},
"Action": "kms:*",
"Resource": "*"
},
{
"Sid": "Enable IAM User Permissions For Log Archive Account",
"Effect": "Allow",
"Principal": {
"AWS": [
"arn:aws:iam::ログアーカイブアカウントのID:root"
]
},
"Action": "kms:Decrypt",
"Resource": "*"
},
{
"Sid": "AWSConfigKMSPolicy",
"Effect": "Allow",
"Principal": {
"Service": "config.amazonaws.com"
},
"Action": [
"kms:Decrypt",
"kms:GenerateDataKey"
],
"Resource": "*",
"Condition": {
"StringEquals": {
"aws:SourceAccount": [
"メンバーアカウントのID",
…
"メンバーアカウントのID"
]
}
}
}
]
}