ワークスペースデプロイ用のIAMロールを作成する
この記事では、次の方法について説明します:
Databricksワークスペースデプロイ用のクロスアカウントIAMロールを作成して設定します。このロールにより、Databricksは、コンピュートリソースとVPCリソースの作成と管理を目的として、お客様のAWSアカウントへの限定的なアクセス権を付与されます。
Databricks アカウントコンソール を使用して、IAM ロールを参照する認証情報設定を作成します。
要件
Databricksアカウント管理者である必要があります。
IAMロールの作成を自動化する
以下の自動化オプションのいずれかを使用して、IAMロールの作成を自動化できます:
ワークスペースをデプロイするためのAWSクイックスタート(CloudFormation)。これは推奨されるワークスペースの展開方法です。
Databricks Terraformプロバイダー。「Terraformを使用したDatabricksワークスペースの作成」を参照してください。
手動でのIAMロール作成
次の手順は、カスタムAWSワークスペースのデプロイに適用されます。カスタムAWS設定オプションを使用してワークスペースをデプロイする場合のみ、以下の手順を実行する必要があります。
ステップ1:クロスアカウントIAMロールを作成する
Databricks アカウント ID を取得します。 「アカウント ID を見つける」を参照してください。
管理者権限を持つユーザーとしてAWSコンソールにログインし、IAMコンソールに移動します。
サイドバーの「ロール」タブをクリックします。
「ロールの作成」をクリックします。
[信頼できるエンティティの種類の選択]で、[AWSアカウント]タイルをクリックします。
[別のAWSアカウント]チェックボックスを選択してください。
アカウント ID フィールドに、 Databricksアカウント ID
414351767826
を入力します。 これは、 アカウント コンソールからコピーしたアカウント IDDatabricks では ありません 。Databricks on AWS GovCloud で Databricksを使用している場合は、 Databricksアカウント ID044793339203
を使用してください。[外部IDが必要]チェックボックスを選択してください。
[外部ID]フィールドに、DatabricksアカウントコンソールからコピーしたDatabricksアカウントIDを入力します。
[次へ]ボタンをクリックします。
[権限の追加]ページで、[次へ]ボタンをクリックします。[名前、確認、作成]ページが表示されます。
「ロール名」フィールドにロール名を入力します。
[役割の作成]をクリックします。役割のリストが表示されます。
ステップ2:アクセスポリシーを作成する
ロールに追加するアクセスポリシーは、Amazon VPC (仮想プライベートクラウド) のデプロイメントタイプによって異なります。 Databricks各権限をどのように使用するかについては、 管理 VPC のIAM 権限」Databricks を参照してください。展開を説明するポリシー手順を使用します。
オプション 1: デフォルト。 Databricks が AWS アカウント内に作成および構成する単一の VPC。 これがデフォルトの設定です。
オプション 2: デフォルトの制限付きで顧客管理される VPC 。 顧客管理VPC と呼ばれる機能を使用して、独自の Databricksに ワークスペースを作成します。VPC
オプション 3: カスタム制限付きの VPC を顧客が管理します。 アカウント ID、VPC ID、AWS リージョン、セキュリティ グループにカスタム制限を設定して、独自の VPC に Databricks ワークスペースを作成します。
オプション1:デフォルトの展開ポリシー
IAMコンソールの[ロール]セクションで、ステップ1で作成したIAMロールをクリックします。
[権限を追加]ドロップダウンをクリックし、[インラインポリシーの作成]を選択します。
ポリシーエディターで、「JSON」タブをクリックします。
以下のアクセスポリシーをコピー&ペーストしてください:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "Stmt1403287045000", "Effect": "Allow", "Action": [ "ec2:AllocateAddress", "ec2:AssignPrivateIpAddresses", "ec2:AssociateDhcpOptions", "ec2:AssociateIamInstanceProfile", "ec2:AssociateRouteTable", "ec2:AttachInternetGateway", "ec2:AttachVolume", "ec2:AuthorizeSecurityGroupEgress", "ec2:AuthorizeSecurityGroupIngress", "ec2:CancelSpotInstanceRequests", "ec2:CreateDhcpOptions", "ec2:CreateFleet", "ec2:CreateInternetGateway", "ec2:CreateLaunchTemplate", "ec2:CreateLaunchTemplateVersion", "ec2:CreateNatGateway", "ec2:CreateRoute", "ec2:CreateRouteTable", "ec2:CreateSecurityGroup", "ec2:CreateSubnet", "ec2:CreateTags", "ec2:CreateVolume", "ec2:CreateVpc", "ec2:CreateVpcEndpoint", "ec2:DeleteDhcpOptions", "ec2:DeleteFleets", "ec2:DeleteInternetGateway", "ec2:DeleteLaunchTemplate", "ec2:DeleteLaunchTemplateVersions", "ec2:DeleteNatGateway", "ec2:DeleteRoute", "ec2:DeleteRouteTable", "ec2:DeleteSecurityGroup", "ec2:DeleteSubnet", "ec2:DeleteTags", "ec2:DeleteVolume", "ec2:DeleteVpc", "ec2:DeleteVpcEndpoints", "ec2:DescribeAvailabilityZones", "ec2:DescribeFleetHistory", "ec2:DescribeFleetInstances", "ec2:DescribeFleets", "ec2:DescribeIamInstanceProfileAssociations", "ec2:DescribeInstanceStatus", "ec2:DescribeInstances", "ec2:DescribeInternetGateways", "ec2:DescribeLaunchTemplates", "ec2:DescribeLaunchTemplateVersions", "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:GetLaunchTemplateData", "ec2:GetSpotPlacementScores", "ec2:ModifyFleet", "ec2:ModifyLaunchTemplate", "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" } } } ] }
「ポリシーの確認」をクリックします。
「名前」フィールドにポリシー名を入力します。
「ポリシーの作成」をクリックします。
(オプション)AWSアカウントレベルで特定のアクションを拒否するためにService Control Policiesを使用する場合、Databricksがクロスアカウントの役割を引き受けることができるように
sts:AssumeRole
がallowlistedであることを確認します。ロールの概要で、ロールARNをコピーしてDatabricksに追加します。
オプション2:デフォルトの制限ポリシーを使用した顧客管理VPC
管理者権限を持つユーザーとしてAWSコンソールにログインし、IAMコンソールに移動します。
サイドバーの「ロール」タブをクリックします。
ロールのリストで、ステップ1で作成したクロスアカウントIAMロールをクリックします。
[権限を追加]ドロップダウンをクリックし、[インラインポリシーの作成]を選択します。
ポリシーエディターで、「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", "ec2:DescribeFleetHistory", "ec2:ModifyFleet", "ec2:DeleteFleets", "ec2:DescribeFleetInstances", "ec2:DescribeFleets", "ec2:CreateFleet", "ec2:DeleteLaunchTemplate", "ec2:GetLaunchTemplateData", "ec2:CreateLaunchTemplate", "ec2:DescribeLaunchTemplates", "ec2:DescribeLaunchTemplateVersions", "ec2:ModifyLaunchTemplate", "ec2:DeleteLaunchTemplateVersions", "ec2:CreateLaunchTemplateVersion", "ec2:AssignPrivateIpAddresses", "ec2:GetSpotPlacementScores" ], "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" } } } ] }
「ポリシーの確認」をクリックします。
「名前」フィールドにポリシー名を入力します。
「ポリシーの作成」をクリックします。
(オプション)AWSアカウントレベルで特定のアクションを拒否するためにService Control Policiesを使用する場合、Databricksがクロスアカウントの役割を引き受けることができるように
sts:AssumeRole
がallowlistedであることを確認します。ロールの概要で、ロールARNをコピーします。
オプション3:カスタムポリシー制限付きの顧客管理VPC
注:
Machine Images (AMI) のソースである Databricks本番運用AWS アカウントはAmazon601306020600
です。このアカウント ID を使用して、AWS アカウント内で使用できる AMI を制限するカスタムアクセスポリシーを作成できます。 詳細については、 Databricksアカウント チームにお問い合わせください。
管理者権限を持つユーザーとしてAWSコンソールにログインし、IAMコンソールに移動します。
サイドバーの「ロール」タブをクリックします。
ロールのリストで、ステップ1で作成した[クロスアカウントIAMロール]をクリックします。
[アクセス許可の追加]ドロップダウンをクリックし、[インラインポリシーの作成]をクリックします。
ポリシーエディターで、「JSON」タブをクリックします。
次のアクセスポリシーをコピーして貼り付けます。
ポリシー内の以下の値を独自の設定値に置き換えます:
ACCOUNTID
— AWSアカウントID(数字)。VPCID
—ワークスペースを起動するAWS VPCのID。REGION
— VPCデプロイメントのAWSリージョン名(例:us-west-2
)。SECURITYGROUPID
— AWSセキュリティグループのID。セキュリティグループ制限を追加すると、クロスアカウントIAMロールを再利用したり、他のワークスペースの認証情報ID(credentials_id
)を参照したりすることはできません。他のワークスペースについては、個別のロール、ポリシー、資格情報オブジェクトを作成する必要があります。
注:
顧客が管理する VPC Databricksのセキュリティ グループにカスタム要件が設定されている場合は、IAM ポリシーのカスタマイズについて アカウント チームにお問い合わせください。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "NonResourceBasedPermissions", "Effect": "Allow", "Action": [ "ec2:AssignPrivateIpAddresses", "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:GetSpotPlacementScores", "ec2:RequestSpotInstances", "ec2:DescribeFleetHistory", "ec2:ModifyFleet", "ec2:DeleteFleets", "ec2:DescribeFleetInstances", "ec2:DescribeFleets", "ec2:CreateFleet", "ec2:DeleteLaunchTemplate", "ec2:GetLaunchTemplateData", "ec2:CreateLaunchTemplate", "ec2:DescribeLaunchTemplates", "ec2:DescribeLaunchTemplateVersions", "ec2:ModifyLaunchTemplate", "ec2:DeleteLaunchTemplateVersions", "ec2:CreateLaunchTemplateVersion" ], "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" } } } ] }
「ポリシーの確認」をクリックします。
「名前」フィールドにポリシー名を入力します。
「ポリシーの作成」をクリックします。
(オプション)AWSアカウントレベルで特定のアクションを拒否するためにService Control Policiesを使用する場合、Databricksがクロスアカウントの役割を引き受けることができるように
sts:AssumeRole
がallowlistedであることを確認します。ロールの概要で、ロールARNをコピーします。
ステップ3:Databricksで資格情報構成を作成する
IAMロールを作成したら、そのロールのIDを使用する資格情報構成を作成することで、それをDatabricksに伝えることができます。
クレデンシャルコンフィギュレーションを作成する方法:
「アカウントコンソール」で、「クラウドリソース」をクリックします。
[資格情報の構成]をクリックします。
[資格情報構成の追加]をクリックします。
[資格情報構成名]フィールドに、新しい資格情報構成の人間が判読できる名前を入力します。
[ロールARN]フィールドに、ロールのARNを入力します。
[追加] をクリックします。
検証は、クレデンシャル構成作成中には実行されません。一部のエラーは、構成を使用して新しいワークスペースを作成する場合にのみ検出されます。これらのエラーには、無効なARNやロールに対する不正な権限などが含まれる可能性があります。
資格情報構成を削除する
資格情報の構成は、作成後に編集することはできません。構成に不正なデータが含まれている場合、またはそのデータが不要になった場合は、資格情報構成を削除します:
アカウント コンソールで、 [クラウド リソース]をクリックします。
[資格情報の構成]をクリックします。
認証情報の設定行で、[アクション]メニューアイコンをクリックし、[削除]を選択します。
資格情報構成名をクリックし、ポップアップダイアログで[削除]をクリックすることもできます。
確認ダイアログで、[削除の確認]をクリックします。