databricks公式ドキュメントやってみた~Secure access to S3 buckets using instance profiles(前編)~
はじめに
公式ドキュメントやってみたシリーズ第2弾です。
今回のテーマは
「Secure access to S3 buckets using instance profiles」です。
インスタンスプロファイルを使用してセキュアにS3バケットにアクセスする方法をdatabricks公式ドキュメントの手順に従ってやってみたいと思います。
今回の作業内容
今回行う作業は以下の8項目です。
※0.ターゲットS3バケットの作成
S3バケットにアクセスするためのインスタンスプロファイルを作成
ターゲットのS3バケットのバケットポリシーの作成
databricks on AWSデプロイ時のIAMロールの確認
ターゲットS3バケットにアクセスするためのIAMロールをEC2に付与
インスタンスプロファイルをdatabricksにアタッチ
インスタンスプロファイルを使用してクラスタを立ち上げる
ノートブックから今回設定したS3へのアクセスを確認する
作業自体がやや長いのと、
細かいロールやポリシーの設定があるため
- 前編(0~4)→AWS側の設定
- 後編(5~7)→databricks側の設定
に分けてやっていきたいと思います。
本題
では、本題に入っていきましょう。
0.ターゲットS3バケットの作成
今回の内容では、databricks on AWSのデプロイ時に使用したS3バケットとは別のS3バケットが必要となりますので、お持ちでない方は新たに作成しましょう。
既存のバケットを使用するという方は次に進みます。
1.S3バケットにアクセスするためのインスタンスプロファイルを作成
AWSにログインしてコンソール画面に入ります。
IAMのページに移動します。
サイドバーからロールを選択してロールの作成をクリック。
信頼されたエンティティの種類を選択→AWSサービス
ユースケースの選択→EC2
を選択して、次のステップに進みます。
アクセス権限、タグの設定は特に設定不要なのでそのまま進んでOKです。
最後の確認ページでロール名を記入してロールの作成をクリック。
作成したロールに戻ってインラインポリシーの追加をクリック。
ポリシーの作成ページでJSONのタブを選択し、以下スクリプトをコピぺ。
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をコピーしておきましょう。
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/*"
}
]
}
S3バケットポリシーの設定は以上です。
3.databricks on AWSデプロイ時のIAMロールの確認
https://accounts.cloud.databricks.com/registration.html#login
からdatabricksにログインします。
サイドバーからAWS Accountを選択しデプロイに使用したロールARNを確認します。
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を記入します。
{
"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側の設定作業を行なっていきます。
お読みいただきありがとうございました。
引き続き後半もご覧いただけると幸いです。
Author And Source
この問題について(databricks公式ドキュメントやってみた~Secure access to S3 buckets using instance profiles(前編)~), 我々は、より多くの情報をここで見つけました https://qiita.com/d_e_n/items/01fcea37b79fe32641c6著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .