Amazon S3 バケットへのアクセスを設定する
Amazon S3 ファイルからデータをインポートするには、Aurora PostgreSQL DB クラスターに、ファイルが含まれている Amazon S3 バケットへのアクセス許可を与える必要があります。次のトピックで説明する 2 つの方法のいずれかで、Amazon S3 バケットへのアクセスを提供します。
トピック
IAM ロールを使用した Amazon S3 バケットへのアクセス
Amazon S3 ファイルからデータをロードするには、ファイルが含まれる Amazon S3 バケットへのアクセス許可を Aurora PostgreSQL DB クラスターに与えます。こうすれば、追加の認証情報を管理したり、aws_s3.table_import_from_s3 関数呼び出しで提供したりする必要はありません。
これを行うには、Amazon S3 バケットへのアクセスを提供する IAM ポリシーを作成します。IAM ロールを作成して、ポリシーをロールにアタッチします。次に、IAM ロールを DB クラスターに割り当てます。
注記
IAM ロールを Aurora Serverless v1 DB クラスターに関連付けることができないため、次の手順は適用されません。
IAM ロール経由で、Amazon S3 へのアクセス権を Aurora PostgreSQL DB クラスターに付与するには
-
IAM ポリシーを作成します。
ポリシーは、Aurora PostgreSQL DB クラスターに Amazon S3 へのアクセスを許可するバケットとオブジェクトのアクセス許可を付与します。
ポリシーに、Amazon S3 バケットから Aurora PostgreSQL へのファイル転送を許可ための次の必須アクションを含めます。
-
s3:GetObject
-
s3:ListBucket
ポリシーに次のリソースを含めて、Amazon S3 バケットとバケット内のオブジェクトを識別します。これは、Amazon S3 にアクセスするための Amazon リソースネーム (ARN) 形式を示しています。
-
arn:aws:s3:::
amzn-s3-demo-bucket
-
arn:aws:s3:::
amzn-s3-demo-bucket
/*
Aurora PostgreSQL の IAM ポリシーの作成の詳細については、「IAM データベースアクセス用の IAM ポリシーの作成と使用」を参照してください。IAM ユーザーガイドの「チュートリアル: はじめてのカスタマー管理ポリシーの作成とアタッチ」も参照してください。
以下の AWS CLI コマンドでは、これらのオプションを指定して、
rds-s3-import-policy
という名前の IAM ポリシーを作成します。amzn-s3-demo-bucket
という名前のバケットへのアクセスを許可します。注記
このコマンドによって返されるポリシー のAmazon リソースネーム (ARN) をメモしておきます。ポリシーを IAM ロールにアタッチする場合、後続のステップで ARN が必要です。
例
Linux、macOS、Unix の場合:
aws iam create-policy \ --policy-name rds-s3-import-policy \ --policy-document '{ "Version": "2012-10-17", "Statement": [ { "Sid": "s3import", "Action": [ "s3:GetObject", "s3:ListBucket" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::
amzn-s3-demo-bucket
", "arn:aws:s3:::amzn-s3-demo-bucket
/*" ] } ] }'Windows の場合:
aws iam create-policy ^ --policy-name rds-s3-import-policy ^ --policy-document '{ "Version": "2012-10-17", "Statement": [ { "Sid": "s3import", "Action": [ "s3:GetObject", "s3:ListBucket" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::
amzn-s3-demo-bucket
", "arn:aws:s3:::amzn-s3-demo-bucket
/*" ] } ] }' -
-
IAM ロールを作成します。
これを行うと、Aurora PostgreSQL がユーザーに代わってこの IAM ロールを引き受け、Amazon S3 バケットにアクセスできます。詳細については、IAM ユーザーガイドの「IAM ユーザーにアクセス許可を委任するロールの作成」を参照してください。
リソースポリシー内では
aws:SourceArn
およびaws:SourceAccount
のグローバル条件コンテキストキーを使用して、サービスに付与するリソースへのアクセス許可を制限することをお勧めします。これは、混乱した使節の問題に対する最も効果的な保護方法です。グローバル条件コンテキストキーの両方を使用し、
aws:SourceArn
の値にアカウント ID が含まれている場合、同じポリシーステートメントで使用する場合は、aws:SourceArn
の値とaws:SourceAccount
の値のアカウントでは同じアカウント ID を使用する必要があります。単一リソースに対するクロスサービスアクセスが必要な場合は
aws:SourceArn
を使用します。-
そのアカウント内の任意のリソースをクロスサービス使用に関連付けることを許可する場合、
aws:SourceAccount
を使用します。
ポリシーでは、必ずリソースの完全な ARN を持つ
aws:SourceArn
グローバル条件コンテキストキーを使用してください。以下の例は、AWS CLI コマンドを使用して、rds-s3-import-role
という名前のロールを作成する方法を示しています。例
Linux、macOS、Unix の場合:
aws iam create-role \ --role-name rds-s3-import-role \ --assume-role-policy-document '{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "rds.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "aws:SourceAccount": "
111122223333
", "aws:SourceArn": "arn:aws:rds:us-east-1:111122223333:cluster:clustername
" } } } ] }'Windows の場合:
aws iam create-role ^ --role-name rds-s3-import-role ^ --assume-role-policy-document '{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "rds.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "aws:SourceAccount": "
111122223333
", "aws:SourceArn": "arn:aws:rds:us-east-1:111122223333:cluster:clustername
" } } } ] }' -
作成した IAM ポリシーを、作成した IAM ロールにアタッチします。
次の AWS CLI コマンドは、先ほどのステップで作成したポリシーを
rds-s3-import-role
という名前のロールに添付し、
を前のステップでメモしたポリシー ARN に置き換えます。your-policy-arn
例
Linux、macOS、Unix の場合:
aws iam attach-role-policy \ --policy-arn
your-policy-arn
\ --role-name rds-s3-import-roleWindows の場合:
aws iam attach-role-policy ^ --policy-arn
your-policy-arn
^ --role-name rds-s3-import-role -
DB クラスターに IAM ロールを追加します。
これを行うには、以下で説明するように、AWS Management Console または AWS CLI を使用します。
コンソールを使用して PostgreSQL DB クラスターの IAM ロールを追加するには
AWS Management Console にサインインし、Amazon RDS コンソール (https://console.aws.amazon.com/rds/
) を開きます。 -
詳細を表示するには、PostgreSQL DB クラスターの名前を選択します。
-
[接続とセキュリティ] タブの [IAM ロールの管理] セクションで、このクラスターに [IAM ロールを追加] で追加するロールを選択します。
-
[Feature] で、[s3Import] を選択します。
-
[Add role] を選択します。
CLI を使用して PostgreSQL DB クラスターの IAM ロールを追加するには
-
次のコマンドを使用して、
my-db-cluster
という名前の PostgreSQL DB クラスターにロールを追加します。
を、以前のステップで書き留めたロール ARN に置き換えます。your-role-arn
s3Import
オプションの値に--feature-name
を使用します。例
Linux、macOS、Unix の場合:
aws rds add-role-to-db-cluster \ --db-cluster-identifier
my-db-cluster
\ --feature-name s3Import \ --role-arnyour-role-arn
\ --regionyour-region
Windows の場合:
aws rds add-role-to-db-cluster ^ --db-cluster-identifier
my-db-cluster
^ --feature-name s3Import ^ --role-arnyour-role-arn
^ --regionyour-region
Amazon RDS API を使用して PostgreSQL DB クラスターに IAM ロールを追加するには、AddRoleToDBCluster オペレーションを呼び出します。
セキュリティ認証情報を使用して Amazon S3 バケットにアクセスする
必要に応じて、IAM ロールでアクセスを提供する代わりに、セキュリティ認証情報を使用して Amazon S3 バケットへのアクセスを提供できます このためには、aws_s3.table_import_from_s3 関数呼び出しで credentials
パラメータを指定します。
credentials
パラメータは、型の構造体 aws_commons._aws_credentials_1
で、AWS 認証情報を含みます。aws_commons.create_aws_credentials 関数を使用して、aws_commons._aws_credentials_1
構造でアクセスキーおよびシークレットキーを設定します。以下に例を示します。
postgres=>
SELECT aws_commons.create_aws_credentials( 'sample_access_key
', 'sample_secret_key
', '') AS creds \gset
aws_commons._aws_credentials_1
構造を作成したら、以下に示すように、aws_s3.table_import_from_s3 関数を credentials
パラメータと共に使用してデータをインポートします。
postgres=>
SELECT aws_s3.table_import_from_s3( 't', '', '(format csv)', :'s3_uri', :'creds' );
または、aws_commons.create_aws_credentials 関数の呼び出しのインラインを aws_s3.table_import_from_s3
関数の呼び出し内に含めることもできます。
postgres=>
SELECT aws_s3.table_import_from_s3( 't', '', '(format csv)', :'s3_uri', aws_commons.create_aws_credentials('sample_access_key
', 'sample_secret_key
', '') );
Amazon S3 へのアクセスのトラブルシューティング
Amazon S3 からデータをインポートしようとしたときに接続の問題が発生した場合は、次の推奨事項を参照してください。
-
Amazon Simple Storage Service ユーザーガイド の「Troubleshooting Amazon S3」
-
IAM ユーザーガイド の Amazon S3 のトラブルシューティングと IAM