1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

databricks公式ドキュメントやってみた~Secure access to S3 buckets using instance profiles(前編)~

Last updated at Posted at 2020-09-04

はじめに

公式ドキュメントやってみたシリーズ第2弾です。
今回のテーマは
「Secure access to S3 buckets using instance profiles」です。
インスタンスプロファイルを使用してセキュアにS3バケットにアクセスする方法をdatabricks公式ドキュメントの手順に従ってやってみたいと思います。

今回の作業内容

今回行う作業は以下の8項目です。

※0.ターゲットS3バケットの作成

  1. S3バケットにアクセスするためのインスタンスプロファイルを作成

  2. ターゲットのS3バケットのバケットポリシーの作成

  3. databricks on AWSデプロイ時のIAMロールの確認

  4. ターゲットS3バケットにアクセスするためのIAMロールをEC2に付与

  5. インスタンスプロファイルをdatabricksにアタッチ

  6. インスタンスプロファイルを使用してクラスタを立ち上げる

  7. ノートブックから今回設定したS3へのアクセスを確認する

作業自体がやや長いのと、
細かいロールやポリシーの設定があるため

  • 前編(0~4)→AWS側の設定
  • 後編(5~7)→databricks側の設定

に分けてやっていきたいと思います。

本題

では、本題に入っていきましょう。

0.ターゲットS3バケットの作成

今回の内容では、databricks on AWSのデプロイ時に使用したS3バケットとは別のS3バケットが必要となりますので、お持ちでない方は新たに作成しましょう。
既存のバケットを使用するという方は次に進みます。

1.S3バケットにアクセスするためのインスタンスプロファイルを作成

AWSにログインしてコンソール画面に入ります。
IAMのページに移動します。
サイドバーからロールを選択してロールの作成をクリック。
image.png

信頼されたエンティティの種類を選択→AWSサービス
ユースケースの選択→EC2
を選択して、次のステップに進みます。
image.png

アクセス権限、タグの設定は特に設定不要なのでそのまま進んでOKです。
最後の確認ページでロール名を記入してロールの作成をクリック。
image.png

作成したロールに戻ってインラインポリシーの追加をクリック。
ポリシーの作成ページでJSONのタブを選択し、以下スクリプトをコピぺ。
image.png

s3-bucket-name のところは今回使用するターゲットS3バケット名を記入してください。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:ListBucket"
      ],
     "Resource": [
        "arn:aws:s3:::s3-bucket-name"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:PutObject",
        "s3:GetObject",
        "s3:DeleteObject",
        "s3:PutObjectAcl"
      ],
      "Resource": [
         "arn:aws:s3:::s3-bucket-name/*"
      ]
    }
  ]
}

ポリシーの確認に進んでポリシー名を記入し、ポリシーの作成をクリックでOK
作成したロールにもどって、ロールARNをコピーしておきましょう。
image.png

2.ターゲットのS3バケットのバケットポリシーの作成

AWSコンソール画面にもどってS3設定画面に移動します。
ターゲットS3バケット、アクセス権限、バケットポリシーの順で移動します。
バケットポリシーエディター欄で以下スクリプトをコピペします。
arn:aws:iam::aws-account-id-databricks:role/iam-role-for-s3-accessの部分は1.でコピーしたロールARNを貼り付けます。
s3-bucket-nameは今回使用するターゲットS3バケット名を記入します。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Example permissions",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::aws-account-id-databricks:role/iam-role-for-s3-access"
      },
      "Action": [
        "s3:GetBucketLocation",
        "s3:ListBucket"
      ],
      "Resource": "arn:aws:s3:::s3-bucket-name"
    },
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::aws-account-id-databricks:role/iam-role-for-s3-access"
      },
      "Action": [
        "s3:PutObject",
        "s3:GetObject",
        "s3:DeleteObject",
        "s3:PutObjectAcl"
      ],
      "Resource": "arn:aws:s3:::s3-bucket-name/*"
    }
  ]
}

こんな感じでコピペできたら保存をクリックします。
image.png

S3バケットポリシーの設定は以上です。

3.databricks on AWSデプロイ時のIAMロールの確認

https://accounts.cloud.databricks.com/registration.html#login
からdatabricksにログインします。
サイドバーからAWS Accountを選択しデプロイに使用したロールARNを確認します。

image.png

4.ターゲットS3バケットにアクセスするためのIAMロールをEC2に付与

AWSの、ロール設定画面に戻ります。
3.で確認したdatabricks on AWS デプロイ時に使用したロールを選択します。
ポリシーの編集で以下スクリプトをコピペします。
arn:aws:iam::aws-account-id-databricks:role/iam-role-for-s3-accessには1.で作成したIAMロールのARNを記入します。
image.png
image.png

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Stmt1403287045000",
      "Effect": "Allow",
      "Action": [
        "ec2:AssociateDhcpOptions",
        "ec2:AssociateIamInstanceProfile",
        "ec2:AssociateRouteTable",
        "ec2:AttachInternetGateway",
        "ec2:AttachVolume",
        "ec2:AuthorizeSecurityGroupEgress",
        "ec2:AuthorizeSecurityGroupIngress",
        "ec2:CancelSpotInstanceRequests",
        "ec2:CreateDhcpOptions",
        "ec2:CreateInternetGateway",
        "ec2:CreateKeyPair",
        "ec2:CreatePlacementGroup",
        "ec2:CreateRoute",
        "ec2:CreateSecurityGroup",
        "ec2:CreateSubnet",
        "ec2:CreateTags",
        "ec2:CreateVolume",
        "ec2:CreateVpc",
        "ec2:CreateVpcPeeringConnection",
        "ec2:DeleteInternetGateway",
        "ec2:DeleteKeyPair",
        "ec2:DeletePlacementGroup",
        "ec2:DeleteRoute",
        "ec2:DeleteRouteTable",
        "ec2:DeleteSecurityGroup",
        "ec2:DeleteSubnet",
        "ec2:DeleteTags",
        "ec2:DeleteVolume",
        "ec2:DeleteVpc",
        "ec2:DescribeAvailabilityZones",
        "ec2:DescribeIamInstanceProfileAssociations",
        "ec2:DescribeInstanceStatus",
        "ec2:DescribeInstances",
        "ec2:DescribePlacementGroups",
        "ec2:DescribePrefixLists",
        "ec2:DescribeReservedInstancesOfferings",
        "ec2:DescribeRouteTables",
        "ec2:DescribeSecurityGroups",
        "ec2:DescribeSpotInstanceRequests",
        "ec2:DescribeSpotPriceHistory",
        "ec2:DescribeSubnets",
        "ec2:DescribeVolumes",
        "ec2:DescribeVpcs",
        "ec2:DetachInternetGateway",
        "ec2:DisassociateIamInstanceProfile",
        "ec2:ModifyVpcAttribute",
        "ec2:ReplaceIamInstanceProfileAssociation",
        "ec2:RequestSpotInstances",
        "ec2:RevokeSecurityGroupEgress",
        "ec2:RevokeSecurityGroupIngress",
        "ec2:RunInstances",
        "ec2:TerminateInstances"
      ],
      "Resource": [
        "*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": "iam:PassRole",
      "Resource": "arn:aws:iam::aws-account-id-databricks:role/iam-role-for-s3-access"
    },
    {
      "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"
        }
      }
    }
  ]
}

編集を終えたらポリシーの確認、変更の保存でOKです。

おわりに

databricks公式ドキュメントやってみた~Secure access to S3 buckets using instance profiles(前編)~
は以上です。
前半でAWS側の設定は完了となりましたので、後半ではそれを使ってdatabricks側の設定作業を行なっていきます。
お読みいただきありがとうございました。
引き続き後半もご覧いただけると幸いです。

1
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?