こんにちは、篠﨑です。
これまで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課