2
0

More than 1 year has passed since last update.

DatabricksにおけるクロスアカウントIAMロールの作成

Posted at

Create a cross-account IAM role | Databricks on AWS [2022/10/13時点]の翻訳です。

本書は抄訳であり内容の正確性を保証するものではありません。正確な内容に関しては原文を参照ください。

Databricksがお使いのAWSアカウントにワークスペースをデプロイできる様に、どのようにクロスアカウントIAMロールをセットアップするのかを学びましょう。

ティップ
Databricks Terraformプロバイダーを用いてIAMロール作成を自動化することができます。Terraformを用いたDatabricksワークスペース(E2)の配備をご覧ください。

クロスアカウントロールの作成

  1. お使いのDatabricks外部ID(アカウントID)を取得します。お使いのAWSアカウントでAWSのクロスアカウントIAMロールを作成する際に必要となります。

    アカウントコンソールに移動し、右上のユーザー名の隣の下向き矢印をクリックします。Account IDでIDをコピーします。

    また、Cloud resources > Credential configuration > Add credential configurationに移動することで(External IDというラベルで)このIDを取得することができます。

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

  3. サイドバーでRolesタブをクリックします。

  4. Create roleをクリックします。

    1. Select type of trusted entityAWS accountタイルをクリックします。

    2. Another AWS accountチェックボックスを選択します。

    3. Account IDフィールドで、DatabricksのアカウントID414351767826を入力します。

      これは、DatabricksのアカウントコンソールからコピーしたアカウントIDではありません

    4. Require external IDチェックボックスを選択します。

    5. External IDフィールドに、Databricksアカウントコンソールからコピーした、あなたのDatabricksアカウントIDを入力します。

    6. Next: Add Permissionsボタンをクリックします。

    7. Next: Name, Review, and Createボタンをクリックします。

    8. 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"
              }
            }
          }
        ]
      }
      
    9. 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をご覧ください。

  1. ロール一覧で、作成したロールをクリックします。

  2. インラインポリシーを追加します。

    1. Permissionsタブで、Add inline policyをクリックします。

    2. ポリシーエディタでJSONタブをクリックします。

    3. あなたの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"
              }
            }
          }
        ]
      }
      
    4. Review policyをクリックします。

    5. Nameフィールドにポリシー名を入力します。

    6. Create policyをクリックします。

    7. AWSアカウントレベルで特定のアクションを拒否するService Control Policiesを使用している場合には、Databricksがクロスアカウントロールを仮定(assume)できるようにsts:AssumeRoleが許可リストに入っていることを確認してください。

  3. ロールのサマリーで、Role ARNをコピーします。

デフォルトのポリシー制限を用いた顧客管理VPC

以下のステップには、デフォルトのポリシー制限を用いて顧客管理VPC内にDatabricksワークスペースを起動するためのアクセスポリシーが含まれています。Databricksがそれぞれの権限をどの様に使用するのかに関しては、IAM permissions for Databricks-managed VPCをご覧ください。

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

  2. サイドバーのRolesに移動します。

  3. ロール一覧で、Databricks用に作成したクロスアカウントIAMロールをクリックします。

  4. インラインポリシーを追加します。

    1. Permissionsタブで、Add inline policyをクリックします。

    2. ポリシーエディタでJSONタブをクリックします。

    3. デフォルトのポリシー制限を用いた顧客管理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"
              }
            }
          }
        ]
      }
      
    4. Review policyをクリックします。

    5. Nameフィールドにポリシー名を入力します。

    6. Create policyをクリックします。

    7. AWSアカウントレベルで特定のアクションを拒否するService Control Policiesを使用している場合には、Databricksがクロスアカウントロールを仮定(assume)できるようにsts:AssumeRoleが許可リストに入っていることを確認してください。

  5. ロールのサマリーで、Role ARNをコピーします。

カスタムのポリシー制限を用いた顧客管理VPC

以下のステップには、カスタムのポリシー制限を用いて顧客管理VPC内にDatabricksワークスペースを起動するためのアクセスポリシーが含まれています。Databricksがそれぞれの権限をどの様に使用するのかに関しては、IAM permissions for Databricks-managed VPCをご覧ください。

注意
Amazon Machine Images (AMI)から提供されているDatabricksのプロダクションAWSアカウントは601306020600です。お使いのAWSアカウントでどのAMIを使用できるのかを制限するカスタムアクセスポリシーを作成するために、このアカウントIDを使用することができます。詳細については、Databricks担当者にお問い合わせください。

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

  2. サイドバーのRolesに移動します。

  3. ロール一覧で、Databricks用に作成したクロスアカウントIAMロールをクリックします。

  4. インラインポリシーを追加します。

    1. Permissionsタブで、Add inline policyをクリックします。

    2. ポリシーエディタでJSONタブをクリックします。

    3. アカウント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を削除してください。最後にあるSidVpcNonresourceSpecificActionsである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"
              }
            }
          }
        ]
      }
      
    4. Review policyをクリックします。

    5. Nameフィールドにポリシー名を入力します。

    6. Create policyをクリックします。

    7. AWSアカウントレベルで特定のアクションを拒否するService Control Policiesを使用している場合には、Databricksがクロスアカウントロールを仮定(assume)できるようにsts:AssumeRoleが許可リストに入っていることを確認してください。

  5. ロールのサマリーで、Role ARNをコピーします。

Databricks 無料トライアル

Databricks 無料トライアル

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0