オプション3:Amazon S3にアクセスするための AWS IAM ユーザー認証情報の設定¶
このセクションでは、S3バケットのセキュリティポリシーを構成し、特定の IAM ユーザーの認証情報にアクセスして、安全に外部ステージにアクセスする方法を説明します。
このトピックの内容:
ステップ1:S3バケットアクセスポリシーを構成する¶
AWS アクセス制御の要件¶
Snowflakeでは、フォルダー(および任意のサブフォルダー)内のファイルにアクセスできるようにするために、S3バケットおよびフォルダーに対する次の権限が必要です。
s3:GetObject
s3:GetObjectVersion
s3:ListBucket
注釈
追加の s3:PutObject
および s3:DeleteObject
権限は、ファイルをバケットにアンロードするか、ファイルをテーブルにロードした後に自動的にパージする場合のみに必要です。
ベストプラクティスとして、Snowflakeは、S3バケットへのSnowflakeアクセス用に IAM ポリシーとユーザーを作成することをお勧めします。その後、ポリシーをユーザーに添付し、 AWS によって生成されたセキュリティ認証情報を使用して、ユーザーはバケット内のファイルにアクセスできます。
IAM ポリシーの作成¶
次の詳細な手順では、S3バケットを使用してデータをロードおよびアンロードできるように、AWS 管理コンソールでSnowflakeのアクセス許可を構成する方法について説明します。
AWS 管理コンソールにログインします。
ホームダッシュボードから、 Identity & Access Management (IAM)を選択します。
左側のナビゲーションペインから Account settings を選択します。
Security Token Service Regions リストを展開し、アカウントがある 地域 に対応する AWS 地域を見つけ、ステータスが Inactive の場合は Activate を選択します。
左側のナビゲーションペインから Policies を選択します。
Create Policy をクリックします。
JSON タブをクリックします。
SnowflakeがS3バケットとフォルダーにアクセスできるようにするポリシードキュメントを追加します。
次のポリシー( JSON 形式)は、指定されたバケットとフォルダーパスに必要なアクセス許可をSnowflakeに提供します。テキストをコピーしてポリシーエディターに貼り付けることができます。
注釈
バケット名
とプレフィックス
を実際のバケット名とフォルダーパスプレフィックスに確実に置き換えます。{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:PutObject", "s3:GetObject", "s3:GetObjectVersion", "s3:DeleteObject", "s3:DeleteObjectVersion" ], "Resource": "arn:aws:s3:::<bucket_name>/<prefix>/*" }, { "Effect": "Allow", "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::<bucket_name>", "Condition": { "StringLike": { "s3:prefix": [ "<prefix>/*" ] } } } ] }
重要
"s3:prefix":
条件を["*"]
に設定すると、指定されたバケット内のすべてのプレフィックスに対するアクセスが許可されます。バケットに1000個を超えるオブジェクトが存在する場合、次のエラーが発生する可能性があります。Access Denied (Status Code: 403; Error Code: AccessDenied)
。エラーを回避するには、 IAM ポリシーから条件を削除します。
"Condition": { "StringLike": { "s3:prefix": [ "*" ] } }ポリシーは引き続きバケット内のファイルへのアクセスを許可しますが、バケットに1000個を超えるオブジェクトが存在する場合でも、S3はエラーを返しません。
Review policy をクリックします。
ポリシー名(例:
snowflake_access
)とオプションの説明を入力します。次に、 Create policy をクリックしてポリシーを作成します。
ステップ2: AWSIAM ユーザーを作成する¶
左側のナビゲーションペインから Users を選択し、 Add user をクリックします。
Add user ページで、新しいユーザー名(例:
snowflake1
)を入力します。アクセスタイプとして Programmatic access を選択し、 Next をクリックします。Attach existing policies directly をクリックして、前に作成したポリシーを選択します。次に、 Next をクリックします。
ユーザーの詳細を確認して、 Create user をクリックします。
アクセス認証情報を記録します。それらを記録する最も簡単な方法は、 Download Credentials をクリックしてファイルに書き込むことです(例:
credentials.csv
)注意
このページを離れると、シークレットアクセスキーは AWS コンソールのどこからも 利用できなくなります 。キーを紛失した場合、ユーザーの認証情報の 新しい セットを生成する必要があります。
現時点での完了事項:
バケットの IAM ポリシーを作成しました。
IAM ユーザーを作成し、ユーザーのアクセス認証情報を生成しました。
ユーザーにポリシーを添付しました。
S3バケットの AWS キーと秘密キーを使用すると、外部ステージを使用してSnowflakeのS3バケットにアクセスするために必要な認証情報を取得できます。
ステップ3: 外部(つまり、S3)ステージを作成する¶
作成した AWS 認証情報を参照する外部ステージを作成します。
CREATE STAGE コマンドを使用してステージを作成するか、既存の外部ステージを変更して CREDENTIALS オプションを設定することを選択できます。
注釈
認証情報は、 ENCRYPTION や FILE_FORMAT などの他のステージパラメーターとは別に処理されます。これらの他のパラメーターのサポートは、外部S3バケットへのアクセスに使用する認証情報に関係なく同じです。
例えば、 mydb.public
をユーザーセッションの現在のデータベースおよびスキーマとして設定し、 my_S3_stage
という名前のステージを作成します。この例では、ステージはS3バケットとパス mybucket/load/files
を参照します。S3バケット内のファイルはサーバー側の暗号化(AWS_SSE_KMS)で暗号化されています。
USE SCHEMA mydb.public; CREATE OR REPLACE STAGE my_S3_stage URL='s3://mybucket/load/files/' CREDENTIALS=(AWS_KEY_ID='1a2b3c' AWS_SECRET_KEY='4x5y6z') ENCRYPTION=(TYPE='AWS_SSE_KMS' KMS_KEY_ID = 'aws/key');