Create a cross-account IAM role | Databricks on AWS [2022/10/13時点]の翻訳です。
本書は抄訳であり内容の正確性を保証するものではありません。正確な内容に関しては原文を参照ください。
Databricksがお使いのAWSアカウントにワークスペースをデプロイできる様に、どのようにクロスアカウントIAMロールをセットアップするのかを学びましょう。
ティップ
Databricks Terraformプロバイダーを用いてIAMロール作成を自動化することができます。Terraformを用いたDatabricksワークスペース(E2)の配備をご覧ください。
クロスアカウントロールの作成
-
お使いのDatabricks外部ID(アカウントID)を取得します。お使いのAWSアカウントでAWSのクロスアカウントIAMロールを作成する際に必要となります。
アカウントコンソールに移動し、右上のユーザー名の隣の下向き矢印をクリックします。Account IDでIDをコピーします。
また、Cloud resources > Credential configuration > Add credential configurationに移動することで(External IDというラベルで)このIDを取得することができます。
-
管理者権限を持つユーザーとしてAWSコンソールにログインし、IAMに移動します。
-
サイドバーでRolesタブをクリックします。
-
Create roleをクリックします。
-
Select type of trusted entityでAWS accountタイルをクリックします。
-
Another AWS accountチェックボックスを選択します。
-
Account IDフィールドで、DatabricksのアカウントID
414351767826
を入力します。 -
Require external IDチェックボックスを選択します。
-
External IDフィールドに、Databricksアカウントコンソールからコピーした、あなたのDatabricksアカウントIDを入力します。
-
Next: Add Permissionsボタンをクリックします。
-
Next: Name, Review, and Createボタンをクリックします。
-
Role nameフィールドにロール名を入力します。
Step 1: Select trusted entitiesのJSONは以下の様なものとなります。JSON{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "sts:AssumeRole", "Principal": { "AWS": "414351767826" }, "Condition": { "StringEquals": { "sts:ExternalId": "YOUR_EXTERNAL_ID" } } } ] }
-
Create roleをクリックします。ロール一覧が表示されます。
-
アクセスポリシーの作成
新規ワークスペースを作成するには、お使いのクロスアカウントIAMロールにアクセスポリシーをセットアップしなくてはなりません。このポリシーは使用するAmazon VPC(Virtual Private Cloud)のデプロイメントのタイプと、ご自身で適用する制限によって変化します。3つのポリシーオプションがあります:
- デフォルト: DatabricksがあなたのAWSアカウント作成し、設定する単一のVPCにワークスペースを作成します。これはデフォルトの設定です。デフォルトのポリシーを使用するには、デフォルトのデプロイメントポリシーをご覧ください。
- デフォルトの制限を用いた顧客管理VPC: 顧客管理VPCという機能を用いて、ご自身のVPCの中にDatabricksワークスペースを作成します。このポリシーを使用するには、デフォルトのポリシー制限を用いた顧客管理VPCをご覧ください。
- カスタムの制限を用いた顧客管理VPC: 顧客管理VPCという機能を用いて、ご自身のVPCの中にDatabricksワークスペースを作成します。アカウントID、VPC ID、AWSリージョン、セキュリティグループに対するカスタムの制限を用いて、アクセスポリシーを設定することができます。このポリシーを使用するには、カスタムのポリシー制限を用いた顧客管理VPCをご覧ください。
重要!
これらのポリシーでは、ワークスペースでNo Public IP (NPIP)とも呼ばれるセキュアクラスター接続を使用していることを前提としています。2022/9/1以降にAccount APIを用いて作成されたワークスペースでは、セキュアクラスター接続はデフォルトとなっています。お使いのワークスペースでセキュアクラスター接続(NPIP)を使用していない場合には、Databricks担当者にお問い合わせください。
デフォルトのデプロイメントポリシー
以下のステップには、お使いのAWSアカウントにDatabricksが作成、設定するVPCでDatabricksワークスペースを起動するためのアクセスポリシーが含まれています。Databricksがそれぞれの権限をどの様に使用するのかに関しては、IAM permissions for Databricks-managed VPCをご覧ください。
-
ロール一覧で、作成したロールをクリックします。
-
インラインポリシーを追加します。
-
あなたのAWSアカウントにDatabricksが作成、設定するVPCにワークスペースをデプロイするためのアクセスポリシーをコピーします。
JSON{ "Version": "2012-10-17", "Statement": [ { "Sid": "Stmt1403287045000", "Effect": "Allow", "Action": [ "ec2:AllocateAddress", "ec2:AssociateDhcpOptions", "ec2:AssociateIamInstanceProfile", "ec2:AssociateRouteTable", "ec2:AttachInternetGateway", "ec2:AttachVolume", "ec2:AuthorizeSecurityGroupEgress", "ec2:AuthorizeSecurityGroupIngress", "ec2:CancelSpotInstanceRequests", "ec2:CreateDhcpOptions", "ec2:CreateInternetGateway", "ec2:CreateNatGateway", "ec2:CreateRoute", "ec2:CreateRouteTable", "ec2:CreateSecurityGroup", "ec2:CreateSubnet", "ec2:CreateTags", "ec2:CreateVolume", "ec2:CreateVpc", "ec2:CreateVpcEndpoint", "ec2:DeleteDhcpOptions", "ec2:DeleteInternetGateway", "ec2:DeleteNatGateway", "ec2:DeleteRoute", "ec2:DeleteRouteTable", "ec2:DeleteSecurityGroup", "ec2:DeleteSubnet", "ec2:DeleteTags", "ec2:DeleteVolume", "ec2:DeleteVpc", "ec2:DeleteVpcEndpoints", "ec2:DescribeAvailabilityZones", "ec2:DescribeIamInstanceProfileAssociations", "ec2:DescribeInstanceStatus", "ec2:DescribeInstances", "ec2:DescribeInternetGateways", "ec2:DescribeNatGateways", "ec2:DescribePrefixLists", "ec2:DescribeReservedInstancesOfferings", "ec2:DescribeRouteTables", "ec2:DescribeSecurityGroups", "ec2:DescribeSpotInstanceRequests", "ec2:DescribeSpotPriceHistory", "ec2:DescribeSubnets", "ec2:DescribeVolumes", "ec2:DescribeVpcs", "ec2:DetachInternetGateway", "ec2:DisassociateIamInstanceProfile", "ec2:DisassociateRouteTable", "ec2:ModifyVpcAttribute", "ec2:ReleaseAddress", "ec2:ReplaceIamInstanceProfileAssociation", "ec2:RequestSpotInstances", "ec2:RevokeSecurityGroupEgress", "ec2:RevokeSecurityGroupIngress", "ec2:RunInstances", "ec2:TerminateInstances" ], "Resource": [ "*" ] }, { "Effect": "Allow", "Action": [ "iam:CreateServiceLinkedRole", "iam:PutRolePolicy" ], "Resource": "arn:aws:iam::*:role/aws-service-role/spot.amazonaws.com/AWSServiceRoleForEC2Spot", "Condition": { "StringLike": { "iam:AWSServiceName": "spot.amazonaws.com" } } } ] }
-
Review policyをクリックします。
-
Nameフィールドにポリシー名を入力します。
-
Create policyをクリックします。
-
AWSアカウントレベルで特定のアクションを拒否するService Control Policiesを使用している場合には、Databricksがクロスアカウントロールを仮定(assume)できるように
sts:AssumeRole
が許可リストに入っていることを確認してください。
デフォルトのポリシー制限を用いた顧客管理VPC
以下のステップには、デフォルトのポリシー制限を用いて顧客管理VPC内にDatabricksワークスペースを起動するためのアクセスポリシーが含まれています。Databricksがそれぞれの権限をどの様に使用するのかに関しては、IAM permissions for Databricks-managed VPCをご覧ください。
-
管理者権限を持つユーザーとしてAWSコンソールにログインし、IAMコンソールに移動します。
-
サイドバーのRolesに移動します。
-
ロール一覧で、Databricks用に作成したクロスアカウントIAMロールをクリックします。
-
インラインポリシーを追加します。
-
デフォルトのポリシー制限を用いた顧客管理VPCにワークスペースをデプロイするためのアクセスポリシーをコピーします。
JSON{ "Version": "2012-10-17", "Statement": [ { "Sid": "Stmt1403287045000", "Effect": "Allow", "Action": [ "ec2:AssociateIamInstanceProfile", "ec2:AttachVolume", "ec2:AuthorizeSecurityGroupEgress", "ec2:AuthorizeSecurityGroupIngress", "ec2:CancelSpotInstanceRequests", "ec2:CreateTags", "ec2:CreateVolume", "ec2:DeleteTags", "ec2:DeleteVolume", "ec2:DescribeAvailabilityZones", "ec2:DescribeIamInstanceProfileAssociations", "ec2:DescribeInstanceStatus", "ec2:DescribeInstances", "ec2:DescribeInternetGateways", "ec2:DescribeNatGateways", "ec2:DescribeNetworkAcls", "ec2:DescribePrefixLists", "ec2:DescribeReservedInstancesOfferings", "ec2:DescribeRouteTables", "ec2:DescribeSecurityGroups", "ec2:DescribeSpotInstanceRequests", "ec2:DescribeSpotPriceHistory", "ec2:DescribeSubnets", "ec2:DescribeVolumes", "ec2:DescribeVpcAttribute", "ec2:DescribeVpcs", "ec2:DetachVolume", "ec2:DisassociateIamInstanceProfile", "ec2:ReplaceIamInstanceProfileAssociation", "ec2:RequestSpotInstances", "ec2:RevokeSecurityGroupEgress", "ec2:RevokeSecurityGroupIngress", "ec2:RunInstances", "ec2:TerminateInstances" ], "Resource": [ "*" ] }, { "Effect": "Allow", "Action": [ "iam:CreateServiceLinkedRole", "iam:PutRolePolicy" ], "Resource": "arn:aws:iam::*:role/aws-service-role/spot.amazonaws.com/AWSServiceRoleForEC2Spot", "Condition": { "StringLike": { "iam:AWSServiceName": "spot.amazonaws.com" } } } ] }
-
Review policyをクリックします。
-
Nameフィールドにポリシー名を入力します。
-
Create policyをクリックします。
-
AWSアカウントレベルで特定のアクションを拒否するService Control Policiesを使用している場合には、Databricksがクロスアカウントロールを仮定(assume)できるように
sts:AssumeRole
が許可リストに入っていることを確認してください。
カスタムのポリシー制限を用いた顧客管理VPC
以下のステップには、カスタムのポリシー制限を用いて顧客管理VPC内にDatabricksワークスペースを起動するためのアクセスポリシーが含まれています。Databricksがそれぞれの権限をどの様に使用するのかに関しては、IAM permissions for Databricks-managed VPCをご覧ください。
注意
Amazon Machine Images (AMI)から提供されているDatabricksのプロダクションAWSアカウントは601306020600
です。お使いのAWSアカウントでどのAMIを使用できるのかを制限するカスタムアクセスポリシーを作成するために、このアカウントIDを使用することができます。詳細については、Databricks担当者にお問い合わせください。
-
管理者権限を持つユーザーとしてAWSコンソールにログインし、IAMコンソールに移動します。
-
サイドバーのRolesに移動します。
-
ロール一覧で、Databricks用に作成したクロスアカウントIAMロールをクリックします。
-
インラインポリシーを追加します。
-
アカウントID、VPC ID、リージョン、セキュリティグループに対するカスタムポリシーを用いた顧客管理VPCにワークスペースをデプロイするには、以下のアクセスポリシーをコピーします。
ポリシーの以下の値をご自身の設定値で置き換えてください。
-
ACCOUNTID
- お使いのAWSアカウントID、数値です。 -
VPCID
- ワークスペースを起動したいAWS VPCのID。 -
REGION
-us-west-2
のようなVPCデプロイメントのAWSリージョン名。 -
SECURITYGROUPID
- お使いのAWSセキュリティグループのID。セキュリティグループの制限を追加する場合、クロスアカウントIAMロールやクレディンシャルID(credentials_id
)への参照を他のワークスペースで再利用することはできません。他のワークスペースには、別のロール、ポリシー、認証オブジェクトを作成する必要があります。
注意
お使いのセキュリティグループが不変の場合、ポリシーから権限:ec2:AuthorizeSecurityGroupEgress
,ec2:AuthorizeSecurityGroupIngress
,ec2:RevokeSecurityGroupEgress
,ec2:RevokeSecurityGroupIngress
を削除してください。最後にあるSid
がVpcNonresourceSpecificActions
であるJSONオブジェクトを削除するようにポリシーを編集してください。JSON{ "Version": "2012-10-17", "Statement": [ { "Sid": "NonResourceBasedPermissions", "Effect": "Allow", "Action": [ "ec2:CancelSpotInstanceRequests", "ec2:DescribeAvailabilityZones", "ec2:DescribeIamInstanceProfileAssociations", "ec2:DescribeInstanceStatus", "ec2:DescribeInstances", "ec2:DescribeInternetGateways", "ec2:DescribeNatGateways", "ec2:DescribeNetworkAcls", "ec2:DescribePrefixLists", "ec2:DescribeReservedInstancesOfferings", "ec2:DescribeRouteTables", "ec2:DescribeSecurityGroups", "ec2:DescribeSpotInstanceRequests", "ec2:DescribeSpotPriceHistory", "ec2:DescribeSubnets", "ec2:DescribeVolumes", "ec2:DescribeVpcAttribute", "ec2:DescribeVpcs", "ec2:CreateTags", "ec2:DeleteTags", "ec2:RequestSpotInstances" ], "Resource": [ "*" ] }, { "Sid": "InstancePoolsSupport", "Effect": "Allow", "Action": [ "ec2:AssociateIamInstanceProfile", "ec2:DisassociateIamInstanceProfile", "ec2:ReplaceIamInstanceProfileAssociation" ], "Resource": "arn:aws:ec2:REGION:ACCOUNTID:instance/*", "Condition": { "StringEquals": { "ec2:ResourceTag/Vendor": "Databricks" } } }, { "Sid": "AllowEc2RunInstancePerTag", "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": [ "arn:aws:ec2:REGION:ACCOUNTID:volume/*", "arn:aws:ec2:REGION:ACCOUNTID:instance/*" ], "Condition": { "StringEquals": { "aws:RequestTag/Vendor": "Databricks" } } }, { "Sid": "AllowEc2RunInstanceImagePerTag", "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": [ "arn:aws:ec2:REGION:ACCOUNTID:image/*" ], "Condition": { "StringEquals": { "aws:ResourceTag/Vendor": "Databricks" } } }, { "Sid": "AllowEc2RunInstancePerVPCid", "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": [ "arn:aws:ec2:REGION:ACCOUNTID:network-interface/*", "arn:aws:ec2:REGION:ACCOUNTID:subnet/*", "arn:aws:ec2:REGION:ACCOUNTID:security-group/*" ], "Condition": { "StringEquals": { "ec2:vpc": "arn:aws:ec2:REGION:ACCOUNTID:vpc/VPCID" } } }, { "Sid": "AllowEc2RunInstanceOtherResources", "Effect": "Allow", "Action": "ec2:RunInstances", "NotResource": [ "arn:aws:ec2:REGION:ACCOUNTID:image/*", "arn:aws:ec2:REGION:ACCOUNTID:network-interface/*", "arn:aws:ec2:REGION:ACCOUNTID:subnet/*", "arn:aws:ec2:REGION:ACCOUNTID:security-group/*", "arn:aws:ec2:REGION:ACCOUNTID:volume/*", "arn:aws:ec2:REGION:ACCOUNTID:instance/*" ] }, { "Sid": "EC2TerminateInstancesTag", "Effect": "Allow", "Action": [ "ec2:TerminateInstances" ], "Resource": [ "arn:aws:ec2:REGION:ACCOUNTID:instance/*" ], "Condition": { "StringEquals": { "ec2:ResourceTag/Vendor": "Databricks" } } }, { "Sid": "EC2AttachDetachVolumeTag", "Effect": "Allow", "Action": [ "ec2:AttachVolume", "ec2:DetachVolume" ], "Resource": [ "arn:aws:ec2:REGION:ACCOUNTID:instance/*", "arn:aws:ec2:REGION:ACCOUNTID:volume/*" ], "Condition": { "StringEquals": { "ec2:ResourceTag/Vendor": "Databricks" } } }, { "Sid": "EC2CreateVolumeByTag", "Effect": "Allow", "Action": [ "ec2:CreateVolume" ], "Resource": [ "arn:aws:ec2:REGION:ACCOUNTID:volume/*" ], "Condition": { "StringEquals": { "aws:RequestTag/Vendor": "Databricks" } } }, { "Sid": "EC2DeleteVolumeByTag", "Effect": "Allow", "Action": [ "ec2:DeleteVolume" ], "Resource": [ "arn:aws:ec2:REGION:ACCOUNTID:volume/*" ], "Condition": { "StringEquals": { "ec2:ResourceTag/Vendor": "Databricks" } } }, { "Effect": "Allow", "Action": [ "iam:CreateServiceLinkedRole", "iam:PutRolePolicy" ], "Resource": "arn:aws:iam::*:role/aws-service-role/spot.amazonaws.com/AWSServiceRoleForEC2Spot", "Condition": { "StringLike": { "iam:AWSServiceName": "spot.amazonaws.com" } } }, { "Sid": "VpcNonresourceSpecificActions", "Effect": "Allow", "Action": [ "ec2:AuthorizeSecurityGroupEgress", "ec2:AuthorizeSecurityGroupIngress", "ec2:RevokeSecurityGroupEgress", "ec2:RevokeSecurityGroupIngress" ], "Resource": "arn:aws:ec2:REGION:ACCOUNTID:security-group/SECURITYGROUPID", "Condition": { "StringEquals": { "ec2:vpc": "arn:aws:ec2:REGION:ACCOUNTID:vpc/VPCID" } } } ] }
-
-
Review policyをクリックします。
-
Nameフィールドにポリシー名を入力します。
-
Create policyをクリックします。
-
AWSアカウントレベルで特定のアクションを拒否するService Control Policiesを使用している場合には、Databricksがクロスアカウントロールを仮定(assume)できるように
sts:AssumeRole
が許可リストに入っていることを確認してください。