ワークスペースのデプロイ用の 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 AWSGovCloudDatabricksアカウントID044793339203
AWSGovCloud170661010020
AWSGovCloud、DoDには を使用します 。 - [外部IDが必要] チェックボックスを選択してください。
- [外部ID ]フィールドに、DatabricksアカウントコンソールからコピーしたDatabricksアカウントIDを入力します。
- [次へ] ボタンをクリックします。
- [権限の追加] ページで、 [次へ] ボタンをクリックします。 [名前、確認、作成] ページが表示されます。
- 「 ロール名 」フィールドにロール名を入力します。
- 「 ロールの作成 」をクリックします。役割のリストが表示されます。
ステップ 2: アクセスポリシーを作成する
ロールに追加するアクセスポリシーは、Amazon VPC (Virtual Private Cloud) のデプロイタイプによって異なります。 Databricksが各アクセス許可をどのように使用するかについては、「IAM Databricksマネージド VPC のアクセス許可 」を参照してください。デプロイメントを説明するポリシーの指示を使用します。
- オプション 1: デフォルト。 Databricks が AWS アカウントで作成および設定する 1 つの VPC。 これはデフォルトの設定です。
- オプション 2: 顧客管理VPC (デフォルトの制限付き)。 顧客管理VPC と呼ばれる機能を使用して、自分の Databricksで ワークスペースを作成します。VPC
- オプション 3: カスタム制限付きの顧客管理VPC。アカウント ID、VPC ID、AWS リージョン、およびセキュリティグループに対するカスタム制限を使用して、独自の VPC に Databricks ワークスペースを作成します。
オプション 1: デフォルト deployment ポリシー
-
IAM コンソールの [ロール] セクションで、ステップ1で作成したIAMロールをクリックします。
-
[権限を追加] ドロップダウンをクリックし、 [インラインポリシーの作成] を選択します。
-
ポリシーエディターで、「 JSON 」タブをクリックします。
-
以下のアクセスポリシーをコピー&ペーストしてください:
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 アカウントレベルで特定のアクションを拒否する場合は、Databricks がクロスアカウントロールを引き受けることができるように、
sts:AssumeRole
が許可リストに登録されていることを確認してください。 -
ロールの概要で、 ロールARN をコピーしてDatabricksに追加します。
オプション 2: 顧客管理VPC with デフォルト restrictions ポリシー
-
管理者権限を持つユーザーとしてAWSコンソールにログインし、 IAM コンソールに移動します。
-
サイドバーの「 ロール 」タブをクリックします。
-
ロールのリストで、ステップ1で作成したクロスアカウントIAMロールをクリックします。
-
[権限を追加] ドロップダウンをクリックし、 [インラインポリシーの作成] を選択します。
-
ポリシーエディターで、「 JSON 」タブをクリックします。
-
次のアクセスポリシーをコピーして貼り付けます。
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 アカウントレベルで特定のアクションを拒否する場合は、Databricks がクロスアカウントロールを引き受けることができるように、
sts:AssumeRole
が許可リストに登録されていることを確認してください。 -
ロールの概要で、 ロール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 アカウントレベルで特定のアクションを拒否する場合は、Databricks がクロスアカウントロールを引き受けることができるように、
sts:AssumeRole
が許可リストに登録されていることを確認してください。 -
ロールの概要で、 ロールARN をコピーします。
手順 3: Databricks で資格情報構成を作成する
IAMロールを作成したら、そのロールのIDを使用する資格情報構成を作成することで、それをDatabricksに伝えることができます。
クレデンシャルコンフィギュレーションを作成する方法:
- 「アカウントコンソール」で、「 クラウドリソース 」をクリックします。
- [資格情報の構成] をクリックします。
- [資格情報構成の追加] をクリックします。
- [資格情報構成名] フィールドに、新しい資格情報構成の人間が判読できる名前を入力します。
- [ロールARN] フィールドに、ロールのARNを入力します。
- [ 追加 ] をクリックします。
検証は、クレデンシャル構成作成中には実行されません。一部のエラーは、構成を使用して新しいワークスペースを作成する場合にのみ検出されます。これらのエラーには、無効なARNやロールに対する不正な権限などが含まれる可能性があります。
資格情報の設定を削除する
資格情報の構成は、作成後に編集することはできません。構成に不正なデータが含まれている場合、またはそのデータが不要になった場合は、資格情報構成を削除します:
-
「アカウントコンソール」で、「 クラウドリソース 」をクリックします。
-
[資格情報の構成] をクリックします。
-
認証情報の設定行で、[アクション]メニューアイコンをクリックし、 [削除] を選択します。
資格情報構成名をクリックし、ポップアップダイアログで [削除] をクリックすることもできます。
-
確認ダイアログで、 [削除の確認] をクリックします。