Deployment Credentialの作成
deployment credentialは、VeloDBがお客様のAWSアカウント内でコンピュートリソースを起動するためのアクセス権限を提供します。この手順では、アクセスポリシーを持つクロスアカウントIAMロールを作成する必要があります。
前提条件
Data Credentialを作成済みで、Data Credentialセクションでバケット名とサービスIAMロールのARNを取得していること。
ステップ1: IAMポリシーの作成
クロスアカウントアクセス権限を細かく制御するため、まずクロスアカウントIAMロール用のIAMポリシーを準備する必要があります。以下に詳細な手順を示します。
-
管理者権限を持つユーザーとしてAWS IAM Consoleにログインします。
-
サイドバーのPoliciesタブをクリックします。
-
Create policyボタンをクリックします。
-
ポリシーエディターでJSONタブをクリックします。
-
以下のアクセスポリシーをエディターにコピー&ペーストします。その後、ポリシー内のプレースホルダーを実際の値に置き換えてください。
<YOUR-AWS-ACCOUNT-ID>: お客様のAWSアカウントID。<YOUR-BUCKET-NAME>: Data Credentialセクションで準備したS3バケット名。<YOUR-ROLE-NAME>: Data Credentialセクションで作成したサービスIAMロール名。
注記 VeloDBウェアハウス作成ウィザードで、Data Credentialセクションを完了してDeployment Credentialの設定に進む際、コンソールが自動的にすぐに使用可能なアクセスポリシーを生成します。このポリシーを、変更やプレースホルダーの手動置換を行うことなく、直接IAMポリシーエディターにコピー&ペーストできます。
{
"Version":"2012-10-17",
"Statement":[
{
"Effect":"Allow",
"Action":[
"ec2:TerminateInstances",
"ec2:StopInstances",
"ec2:StartInstances",
"ec2:RebootInstances",
"ec2:ModifyInstanceAttribute",
"ec2:ModifyVolume"
],
"Resource":[
"arn:aws:ec2:*:*:volume/*",
"arn:aws:ec2:*:*:instance/*"
],
"Condition":{
"StringEquals":{
"aws:ResourceTag/resource-created-by":"velodb"
}
}
},
{
"Effect":"Allow",
"Action":[
"ec2:DescribeVpcs",
"ec2:DescribeSubnets",
"ec2:DescribeAccountAttributes",
"ec2:DescribeAddresses",
"ec2:DescribeNatGateways",
"ec2:DescribeInternetGateways",
"ec2:DescribeInstances",
"ec2:DescribeSecurityGroups",
"ec2:DescribeSecurityGroupRules",
"ec2:DescribeAvailabilityZones",
"ec2:DescribeInstanceTypes",
"ec2:ModifyInstanceAttribute",
"ec2:DescribeVolumes",
"ec2:DescribeImages",
"ec2:DescribeVpcEndpoints",
"ec2:DescribePrefixLists",
"ec2:DescribeRouteTables",
"ec2:DescribeTags",
"elasticloadbalancing:DescribeLoadBalancers",
"elasticloadbalancing:DescribeListeners",
"elasticloadbalancing:DescribeLoadBalancerAttributes",
"elasticloadbalancing:DescribeTargetGroupAttributes",
"elasticloadbalancing:DescribeTags",
"elasticloadbalancing:DescribeTargetHealth",
"elasticloadbalancing:DescribeTargetGroups",
"iam:GetPolicy",
"iam:GetPolicyVersion"
],
"Resource":[
"*"
]
},
{
"Effect":"Allow",
"Action":[
"ec2:RunInstances",
"ec2:CreateTags"
],
"Resource":[
"arn:aws:ec2:*:*:volume/*",
"arn:aws:ec2:*:*:instance/*",
"arn:aws:ec2:*:*:network-interface/*"
],
"Condition":{
"StringEquals":{
"aws:RequestTag/resource-created-by":"velodb"
}
}
},
{
"Effect":"Allow",
"Action":[
"ec2:RunInstances"
],
"Resource":[
"arn:aws:ec2:*:*:image/*",
"arn:aws:ec2:*:*:security-group/*",
"arn:aws:ec2:*:*:subnet/*"
]
},
{
"Effect":"Allow",
"Action":[
"ec2:CreateTags",
"ec2:DeleteTags"
],
"Resource":[
"arn:aws:ec2:*:*:instance/*",
"arn:aws:ec2:*:*:volume/*",
"arn:aws:ec2:*:*:network-interface/*"
],
"Condition":{
"StringEquals":{
"ec2:ResourceTag/resource-created-by":"velodb"
}
}
},
{
"Effect":"Allow",
"Action":[
"elasticloadbalancing:CreateListener",
"elasticloadbalancing:CreateLoadBalancer",
"elasticloadbalancing:CreateTargetGroup"
],
"Resource":[
"arn:aws:elasticloadbalancing:*:*:targetgroup/*",
"arn:aws:elasticloadbalancing:*:*:loadbalancer/*",
"arn:aws:elasticloadbalancing:*:*:listener/*"
],
"Condition":{
"StringEquals":{
"aws:RequestTag/resource-created-by":"velodb"
}
}
},
{
"Effect":"Allow",
"Action":[
"elasticloadbalancing:RegisterTargets",
"elasticloadbalancing:DeleteLoadBalancer",
"elasticloadbalancing:ModifyTargetGroupAttributes",
"elasticloadbalancing:DeregisterTargets",
"elasticloadbalancing:DeleteTargetGroup",
"elasticloadbalancing:ModifyLoadBalancerAttributes",
"elasticloadbalancing:DeleteListener"
],
"Resource":[
"arn:aws:elasticloadbalancing:*:*:targetgroup/*",
"arn:aws:elasticloadbalancing:*:*:loadbalancer/*",
"arn:aws:elasticloadbalancing:*:*:listener/*"
],
"Condition":{
"StringEquals":{
"elasticloadbalancing:ResourceTag/resource-created-by":"velodb"
}
}
},
{
"Effect":"Allow",
"Action":[
"elasticloadbalancing:AddTags",
"elasticloadbalancing:RemoveTags"
],
"Resource":[
"arn:aws:elasticloadbalancing:*:*:*"
],
"Condition":{
"StringEquals":{
"elasticloadbalancing:ResourceTag/resource-created-by":"velodb"
}
}
},
{
"Effect":"Allow",
"Action":[
"s3:GetBucketLocation",
"s3:GetBucketVersioning",
"s3:GetBucketPublicAccessBlock",
"s3:GetLifecycleConfiguration",
"s3:PutLifecycleConfiguration",
"s3:ListBucket"
],
"Resource":[
"arn:aws:s3:::<YOUR-BUCKET-NAME>"
]
},
{
"Effect":"Allow",
"Action":[
"iam:GetInstanceProfile",
"iam:GetRole",
"iam:GetRolePolicy",
"iam:ListRolePolicies",
"iam:ListAttachedRolePolicies"
],
"Resource":[
"arn:aws:iam::<YOUR-AWS-ACCOUNT-ID>:instance-profile/<YOUR-ROLE-NAME>",
"arn:aws:iam::<YOUR-AWS-ACCOUNT-ID>:role/<YOUR-ROLE-NAME>"
]
},
{
"Effect":"Allow",
"Action":[
"iam:PassRole"
],
"Resource":[
"arn:aws:iam::<YOUR-AWS-ACCOUNT-ID>:role/<YOUR-ROLE-NAME>"
],
"Condition":{
"StringEquals":{
"iam:PassedToService":"ec2.amazonaws.com"
}
}
},
{
"Effect":"Allow",
"Action":[
"iam:CreateServiceLinkedRole"
],
"Resource":[
"arn:aws:iam::*:role/aws-service-role/elasticloadbalancing.amazonaws.com/AWSServiceRoleForElasticLoadBalancing"
],
"Condition":{
"StringEquals":{
"iam:AWSServiceName":"elasticloadbalancing.amazonaws.com"
}
}
}
]
} -
Nextボタンをクリックします。
-
Nameフィールドに、ポリシー名を入力します。(例:AllowVeloDBCrossAccountAccess)
-
Create policyをクリックします。
ステップ 2: クロスアカウントIAMロールの作成
- AWS IAMコンソールに戻ります。
- サイドバーのRolesタブをクリックします。
- Create roleをクリックします。
- Trusted Entity タイプ: AWS accountを選択します。
- Another AWS accountを選択します。
- Account IDフィールドに、VeloDBアカウントID: 757278738533を入力します。
- External IDフィールドに、VeloDBコンソールからコピーしたVeloDB external idを入力します。
- Add permissionsステップで、ステップ 1で作成したポリシーを選択します。
- Nextボタンをクリックします。
- ロール名を入力します。(例:AllowVeloDBCrossAccountAccess)
- Create roleをクリックします。
- ロール概要で、Role ARNをコピーしてVeloDBコンソールに追加します。