#はじめに
前回の記事でRDS Custom for Oracleを作成するための、CEV(Custom Engine Vertion)を作成しました。CEVができていればRDS Customをプロビジョニングできますが、プロビジョニング実施時にCEVの参照権限やRDS Customに与えるためのロール等の準備ができていないとプロビジョニングできません。
基本的に設定はユーザガイドのSetting up your environment for Amazon RDS Custom for Oracleの内容になりますが、一部現時点では誤っている部分等があったりしてそのまま実行してもうまくいかないため、こちらで記載します。
#RDS作成の流れ
CEV作成からRDS作成のイメージは以下になります。
といってもおおざっぱすぎてちょっとわかり辛いですね、、
前回の記事が①と②の最初の部分、今回は②を行うための準備、みたいな位置づけです。
(Amazon RDS Custom for Oracle – New Control Capabilities in Database Environment)
##前提条件の確認
利用できるリージョンは現時点(2021/12/5)では東京を含む以下9つになります。
最新はユーザガイドを参照ください。
- Asia Pacific (Tokyo)
- Asia Pacific (Singapore)
- Asia Pacific (Sydney)
- Europe (Frankfurt)
- Europe (Stockholm)
- Europe (Ireland)
- US East (N. Virginia)
- US East (Ohio)
- US West (Oregon)
##RDS Custom作成のための事前準備
次の順序で実施していくことで、作成することができます。
- CEV(Custom Engine Version)の作成
- KMSキーの準備
- IAMロールの作成
- セキュリティグループの作成
- エンドポイントの設定
####CEV作成
手引きはこちらに記載してますので、参考にしてください。
####KMSキーの準備
ロールにアタッチできる対称Keyがあれば大丈夫です、必要な場合にはKMS側にも権限を追加します。
Make sure that you have a symmetric AWS KMS key
####IAMロールの作成
RDS Custom for Oracleを作成するためには、Custom RDSインスタンスにアタッチするためのIAMロールが必要になります。
IAMロールは AWSRDSCustom という名前で始まる必要があり、ユーザガイドに記載のあるポリシーがアタッチされている必要があります。
ポリシーの例
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "1",
"Effect": "Allow",
"Action": [
"ssm:DescribeAssociation",
"ssm:GetDeployablePatchSnapshotForInstance",
"ssm:GetDocument",
"ssm:DescribeDocument",
"ssm:GetManifest",
"ssm:GetParameter",
"ssm:GetParameters",
"ssm:ListAssociations",
"ssm:ListInstanceAssociations",
"ssm:PutInventory",
"ssm:PutComplianceItems",
"ssm:PutConfigurePackageResult",
"ssm:UpdateAssociationStatus",
"ssm:UpdateInstanceAssociationStatus",
"ssm:UpdateInstanceInformation",
"ssm:GetConnectionStatus",
"ssm:DescribeInstanceInformation",
"ssmmessages:CreateControlChannel",
"ssmmessages:CreateDataChannel",
"ssmmessages:OpenControlChannel",
"ssmmessages:OpenDataChannel"
],
"Resource": [
"*"
]
},
{
"Sid": "2",
"Effect": "Allow",
"Action": [
"ec2messages:AcknowledgeMessage",
"ec2messages:DeleteMessage",
"ec2messages:FailMessage",
"ec2messages:GetEndpoint",
"ec2messages:GetMessages",
"ec2messages:SendReply"
],
"Resource": [
"*"
]
},
{
"Sid": "3",
"Effect": "Allow",
"Action": [
"logs:PutRetentionPolicy",
"logs:PutLogEvents",
"logs:DescribeLogStreams",
"logs:DescribeLogGroups",
"logs:CreateLogStream",
"logs:CreateLogGroup"
],
"Resource": [
"arn:aws:logs:ap-northeast-1:*:log-group:rds-custom-instance*"
]
},
{
"Sid": "4",
"Effect": "Allow",
"Action": [
"s3:putObject",
"s3:getObject",
"s3:getObjectVersion"
],
"Resource": [
"arn:aws:s3:::do-not-delete-rds-custom-*/*"
]
},
{
"Sid": "5",
"Effect": "Allow",
"Action": [
"cloudwatch:PutMetricData"
],
"Resource": [
"*"
],
"Condition": {
"StringEquals": {
"cloudwatch:namespace": [
"RDSCustomForOracle/Agent"
]
}
}
},
{
"Sid": "6",
"Effect": "Allow",
"Action": [
"events:PutEvents"
],
"Resource": [
"*"
]
},
{
"Sid": "7",
"Effect": "Allow",
"Action": [
"secretsmanager:GetSecretValue",
"secretsmanager:DescribeSecret"
],
"Resource": [
"arn:aws:secretsmanager:ap-northeast-1:xxxxxxxxxxxx:secret:do-not-delete-rds-custom-*"
]
},
{
"Sid": "8",
"Effect": "Allow",
"Action": [
"s3:ListBucketVersions"
],
"Resource": [
"arn:aws:s3:::do-not-delete-rds-custom-*"
]
},
{
"Sid": "9",
"Effect": "Allow",
"Action": "ec2:CreateSnapshots",
"Resource": [
"arn:aws:ec2:*:*:instance/*",
"arn:aws:ec2:*:*:volume/*"
],
"Condition": {
"StringEquals": {
"ec2:ResourceTag/AWSRDSCustom": "custom-oracle"
}
}
},
{
"Sid": "10",
"Effect": "Allow",
"Action": "ec2:CreateSnapshots",
"Resource": [
"arn:aws:ec2:*::snapshot/*"
]
},
{
"Sid": "11",
"Effect": "Allow",
"Action": [
"kms:Decrypt",
"kms:GenerateDataKey"
],
"Resource": [
"arn:aws:kms:ap-northeast-1:xxxxxxxxxxxx:key/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
]
},
{
"Sid": "12",
"Effect": "Allow",
"Action": "ec2:CreateTags",
"Resource": "*",
"Condition": {
"StringLike": {
"ec2:CreateAction": [
"CreateSnapshots"
]
}
}
}
]
}
####セキュリティグループ・エンドポイント設定
次に、SSMで接続するためのセキュリティグループ・エンドポイント設定が必要になります。
RDS Custom for Oracleにアタッチするセキュリティグループは、RDS Custom自体がSSMを用いて管理されるため、ポート443のアウトバウンド接続が許可されている必要があります。
また、エンドポイントは以下を利用する必要があり、以下のエンドポイント側のセキュリティグループを設定する場合にはエンドポイント側でポート443のインバウンドが許可されている必要があります。
- Amazon CloudWatch
- Amazon CloudWatch Logs
- Amazon CloudWatch Events
- Amazon EC2
- Amazon EventBridge
- Amazon S3
- AWS Secrets Manager
- AWS Systems Manager
詳しくはユーザガイドに記載がありますが、ユーザガイド中の表には一部足りない点があり(2021/12/7時点)、ec2, ec2messages, ssmmessages辺りを追加する必要があります。(S3はGateway型のエンドポイントである必要があります)
このあたりの設定が足りていないと、RDS Custom作成時にエラーメッセージが出力されます。
基本的にはSSMの通信なので、SSMのユーザガイドとかを見ると解決できると思います。
あとは、細かいですがインスタンスメタデータへのアクセスも必要になってきます。
#まとめ
設定自体は難しくないですが、設定が足りていないとRDS Custom作成時にエラーが発生します。
特にセキュリティグループやエンドポイントは何が正しくないのかわかり辛いので、エラーを見ながら対応するか、ガバガバ設定で一度試して、成功したら少しずつ厳しくしていく、というようなアプローチが必要なのでは?と思います。
CEVが作成できて、事前準備も完了したら、RDS Customを作成することができます。