メインコンテンツまでスキップ

ワークスペースのデプロイ用の IAMロールを作成する

この記事では、次の方法について説明します:

  • Databricksワークスペースデプロイ用のクロスアカウントIAMロールを作成して設定します。このロールにより、Databricksは、コンピュートリソースとVPCリソースの作成と管理を目的として、お客様のAWSアカウントへの限定的なアクセス権を付与されます。
  • Databricks アカウントコンソールを使用して、IAMロールを参照する認証情報設定を作成します。

必要条件

IAMロールの作成を自動化する

以下の自動化オプションのいずれかを使用して、IAMロールの作成を自動化できます:

IAMロールの手動作成

次の手順は、カスタムAWSワークスペースのデプロイに適用されます。 カスタムAWS設定 オプションを使用してワークスペースをデプロイする場合のみ、以下の手順を実行する必要があります。

ステップ 1: クロスアカウント IAMロールを作成する

  1. Databricks アカウント ID を取得します。 「アカウント ID を確認する」を参照してください。
  2. 管理者権限を持つユーザーとしてAWSコンソールにログインし、 IAM コンソールに移動します。
  3. サイドバーの「 ロール 」タブをクリックします。
  4. ロールの作成 」をクリックします。
    1. [信頼できるエンティティの種類の選択] で、 [AWSアカウント] タイルをクリックします。
    2. [別のAWSアカウント] チェックボックスを選択してください。
    3. 「アカウント ID」フィールドに、 Databricks アカウント ID 414351767826を入力します。 これは、 アカウントコンソールからコピーしたアカウントIDDatabricks ではありません 。を使用している場合は、 には Databricks on AWSGovCloudDatabricksアカウントID044793339203 AWSGovCloud170661010020AWSGovCloud、DoDには を使用します 。
    4. [外部IDが必要] チェックボックスを選択してください。
    5. [外部ID ]フィールドに、DatabricksアカウントコンソールからコピーしたDatabricksアカウントIDを入力します。
    6. [次へ] ボタンをクリックします。
    7. [権限の追加] ページで、 [次へ] ボタンをクリックします。 [名前、確認、作成] ページが表示されます。
    8. ロール名 」フィールドにロール名を入力します。
    9. ロールの作成 」をクリックします。役割のリストが表示されます。

ステップ 2: アクセスポリシーを作成する

ロールに追加するアクセスポリシーは、Amazon VPC (Virtual Private Cloud) のデプロイタイプによって異なります。 Databricksが各アクセス許可をどのように使用するかについては、「IAM Databricksマネージド VPC のアクセス許可 」を参照してください。デプロイメントを説明するポリシーの指示を使用します。

オプション 1: デフォルト deployment ポリシー

  1. IAM コンソールの [ロール] セクションで、ステップ1で作成したIAMロールをクリックします。

  2. [権限を追加] ドロップダウンをクリックし、 [インラインポリシーの作成] を選択します。

  3. ポリシーエディターで、「 JSON 」タブをクリックします。

  4. 以下のアクセスポリシーをコピー&ペーストしてください:

    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"
    }
    }
    }
    ]
    }
  5. ポリシーの確認 」をクリックします。

  6. 名前 」フィールドにポリシー名を入力します。

  7. ポリシーの作成 」をクリックします。

  8. (オプション) サービスコントロールポリシー を使用して AWS アカウントレベルで特定のアクションを拒否する場合は、Databricks がクロスアカウントロールを引き受けることができるように、 sts:AssumeRole が許可リストに登録されていることを確認してください。

  9. ロールの概要で、 ロールARN をコピーしてDatabricksに追加します。

オプション 2: 顧客管理VPC with デフォルト restrictions ポリシー

  1. 管理者権限を持つユーザーとしてAWSコンソールにログインし、 IAM コンソールに移動します。

  2. サイドバーの「 ロール 」タブをクリックします。

  3. ロールのリストで、ステップ1で作成したクロスアカウントIAMロールをクリックします。

  4. [権限を追加] ドロップダウンをクリックし、 [インラインポリシーの作成] を選択します。

  5. ポリシーエディターで、「 JSON 」タブをクリックします。

  6. 次のアクセスポリシーをコピーして貼り付けます。

    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"
    }
    }
    }
    ]
    }
  7. ポリシーの確認 」をクリックします。

  8. 名前 」フィールドにポリシー名を入力します。

  9. ポリシーの作成 」をクリックします。

  10. (オプション) サービスコントロールポリシー を使用して AWS アカウントレベルで特定のアクションを拒否する場合は、Databricks がクロスアカウントロールを引き受けることができるように、 sts:AssumeRole が許可リストに登録されていることを確認してください。

  11. ロールの概要で、 ロールARN をコピーします。

オプション 3: カスタム ポリシーの制限がある顧客管理VPC

注記

Machine Images (AMI) のソース Databricks元となる 本番運用AWS アカウントはAmazon601306020600 です。このアカウント ID を使用して、AWS アカウント内で使用できる AMI を制限するカスタムアクセスポリシーを作成できます。 詳しくは、 Databricks アカウントチームにお問い合わせください。

  1. 管理者権限を持つユーザーとしてAWSコンソールにログインし、 IAM コンソールに移動します。

  2. サイドバーの「 ロール 」タブをクリックします。

  3. ロールのリストで、ステップ1で作成した[クロスアカウントIAMロール]をクリックします。

  4. [アクセス許可の追加] ドロップダウンをクリックし、 [インラインポリシーの作成]を クリックします。

  5. ポリシーエディターで、「 JSON 」タブをクリックします。

  6. 次のアクセスポリシーをコピーして貼り付けます。

    ポリシー内の以下の値を独自の設定値に置き換えます:

    • ACCOUNTID — AWSアカウントID(数字)。

    • VPCID —ワークスペースを起動するAWS VPCのID。

    • REGION — VPCデプロイメントのAWSリージョン名(例:us-west-2)。

    • SECURITYGROUPID — AWSセキュリティグループのID。セキュリティグループ制限を追加すると、クロスアカウントIAMロールを再利用したり、他のワークスペースの認証情報ID(credentials_id)を参照したりすることはできません。他のワークスペースについては、個別のロール、ポリシー、資格情報オブジェクトを作成する必要があります。

注記

顧客管理VPC でセキュリティ グループ用にカスタム要件を設定している場合は、Databricks アカウント チームに連絡して、IAM ポリシーのカスタマイズについてサポートを受けてください。

JSON
{
"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"
}
}
}
]
}
  1. ポリシーの確認 」をクリックします。

  2. 名前 」フィールドにポリシー名を入力します。

  3. ポリシーの作成 」をクリックします。

  4. (オプション) サービスコントロールポリシー を使用して AWS アカウントレベルで特定のアクションを拒否する場合は、Databricks がクロスアカウントロールを引き受けることができるように、 sts:AssumeRole が許可リストに登録されていることを確認してください。

  5. ロールの概要で、 ロールARN をコピーします。

手順 3: Databricks で資格情報構成を作成する

IAMロールを作成したら、そのロールのIDを使用する資格情報構成を作成することで、それをDatabricksに伝えることができます。

クレデンシャルコンフィギュレーションを作成する方法:

  1. アカウントコンソール」で、「 クラウドリソース 」をクリックします。
  2. [資格情報の構成] をクリックします。
  3. [資格情報構成の追加] をクリックします。
  4. [資格情報構成名] フィールドに、新しい資格情報構成の人間が判読できる名前を入力します。
  5. [ロールARN] フィールドに、ロールのARNを入力します。
  6. [ 追加 ] をクリックします。

検証は、クレデンシャル構成作成中には実行されません。一部のエラーは、構成を使用して新しいワークスペースを作成する場合にのみ検出されます。これらのエラーには、無効なARNやロールに対する不正な権限などが含まれる可能性があります。

資格情報の設定を削除する

資格情報の構成は、作成後に編集することはできません。構成に不正なデータが含まれている場合、またはそのデータが不要になった場合は、資格情報構成を削除します:

  1. アカウントコンソール」で、「 クラウドリソース 」をクリックします。

  2. [資格情報の構成] をクリックします。

  3. 認証情報の設定行で、[アクション]メニューアイコンをクリックし、 [削除] を選択します。

    資格情報構成名をクリックし、ポップアップダイアログで [削除] をクリックすることもできます。

  4. 確認ダイアログで、 [削除の確認] をクリックします。