こんにちは、篠﨑です。
これまでAmazon Neptuneでデータの操作をするブログを書いてきましたが、 今回は、Amazon Neptuneでデータ操作をする際に必要な権限とセキュリティグループについてまとめていきたいと思います。
はじめに
今回やりたいことは以下2点です。
- JupyterNotebookを利用してAmazon Neptuneに接続すること
- Amazon NeptuneにS3からデータをロードすること
基本的に最小権限での操作権限で設定しますが、できるだけAWS Managed Policyを利用していきます。
必要なポリシー
JupyterNotebookを開く
読み込み権限
今回はAWS Managed Policyを利用するため、以下ポリシーを選択します。
- NeptuneReadOnlyAccess
また、上記ポリシーではNotebookInstanceのリストができないため、下記権限を持つポリシーを作成します。
- ListNotebookInstances
以下ポリシー例
{ "Version": "2012-10-17", "Statement": [ { "Sid": "ListNotebookInstances", "Effect": "Allow", "Action": "sagemaker:ListNotebookInstances", "Resource": "*" } ] }
書き込み権限
次にJupyterNotebookのノートブックを開く権限を付与します。 NotebookはAmazon Sagemakerのサービスのため、下記アクションの権限を探す際にはAmazon Sagemakerから探してください。
- CreatePresignedNotebookInstanceUrl
S3からデータをロードする
EC2を用いてS3からAmazon Neptuneにデータをロードする場合、以下三点に注意します。
- Amazon Neptuneに付与するセキュリティグループ
- Amazon Neptuneに付与するIAM Role
- S3バケットにデータを入れるIAM ユーザー
尚、S3バケットにEC2からアクセスするため、インターネット利用ができない場合はS3のVPC Endpointを利用してください。
Amazon Neptuneに付与するセキュリティグループ
EC2から以下のようなコマンドを利用してAmazon Neptuneにデータをロードします。
curl -X POST \ -H 'Content-Type: application/json' \ https://{database_identifier}-instance-1.*********.{region_id}.neptune.amazonaws.com:8182/loader -d ' { "source" : "s3://{bucket_name}/sample/Data.csv", "format" : "csv", "iamRoleArn" : "arn:aws:iam::999999999999:role/RoleArn", "region" : "{region_id}", "failOnError" : "FALSE", "parallelism" : "MEDIUM", "updateSingleCardinalityProperties" : "FALSE", "queueRequest" : "TRUE" }'
そのため、Amazon Neptune側でアクセス許可をするセキュリティグループを作成します。
セキュリティグループで開けるポートは8182
ポートです。
Amazon NeptuneにアクセスするEC2等のIPアドレスもしくはセキュリティグループを許可してください。
Amazon Neptuneに付与するIAM Role
S3の閲覧権限が必要となります。
そのため、AWSマネージドのAmazonS3ReadOnlyAccess
ポリシーを付与したロールを準備します。
また、利用するサービスはAmazon Neptuneなのですが、信頼関係はRDSを選択します
信頼関係のポリシーは以下の通りです。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "rds.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
S3バケットにデータを入れるIAM ユーザー
特定のバケット「sample_bucket」にデータを入れることとし、オブジェクトの配置、削除、オブジェクトの取得、オブジェクトの閲覧を許可します。 今回はAWSマネジメントコンソールからデータの挿入することも考慮し、以下のように設定しています。
以下ポリシー例
{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "s3:PutObject", "s3:GetObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::sample_bucket/*", "arn:aws:s3:::sample_bucket" ] }, { "Sid": "VisualEditor1", "Effect": "Allow", "Action": "s3:ListAllMyBuckets", "Resource": "*" } ] }
おわりに
以上がAmazon Neptuneを使うときの権限等のまとめかなと思います。 Amazon Neptuneに付与するロールがRDSなのが驚きでした。
また何かあれば書こうと思います!
篠﨑 勇輔(書いた記事を見る)
クラウドインテグレーション部 SA1課