Amazon Simple Storage Service (Amazon S3) バケットを、カスタマーマネージの AWS Key Management Service (AWS KMS) キーでデフォルトの暗号化を使用するように設定しました。AWS Identity and Access Management (IAM) ユーザーがバケットからオブジェクトをダウンロードしたり、バケットにオブジェクトをアップロードしたりできるようにしたいと考えています。
解決策
まず、AWS KMS キーポリシーを変更します。次に、IAM ユーザーのアイデンティティベースのポリシーを変更します。IAM ユーザーが S3 バケットとは異なるアカウントにいる場合は、バケットポリシーも変更する必要があります。
キーポリシーを変更する
次の手順を実行します。
-
AWS KMS コンソールを開きます。
-
ナビゲーションペインで [カスタマーマネージドキー] を選択し、キーのリストから目的のキーを選択します。
-
[キーポリシー] タブを選択してポリシードキュメントを表示します。
注: AWS KMS コンソールを使用してカスタマーマネージドキーを作成した場合は、[キーポリシー] タブの [ポリシービューへの切り替え] を選択してポリシードキュメントを表示する必要があります。
-
[編集] を選択し、キーポリシーに次のステートメントを追加して kms:GenerateDataKey と kms:Decrypt のアクセス許可を付与します。
{
"Sid": "ExampleStmt",
"Action": [
"kms:Decrypt",
"kms:GenerateDataKey"
],
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::111122223333:user/Jane"
},
"Resource": "*"
}
注: 前述のポリシーステートメントの例には、暗号化された S3 バケットにオブジェクトをダウンロードおよびアップロードするために最低限必要なアクセス許可のみが含まれています。ご自身のユースケースに基づいてさらにアクセス許可を追加できます。
同じアカウントアクセス用のアイデンティティベースのポリシーを変更する
次の手順を実行します。
-
IAM コンソールを開きます。
-
IAM ユーザーに次のポリシーをアタッチして、ユーザーがバケットからオブジェクトをアップロードおよびダウンロードできるようにします。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "ExampleStmt",
"Action": [
"s3:GetObject",
"s3:PutObject"
],
"Effect": "Allow",
"Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
}
]
}
注: Resource 値をバケットの Amazon リソースネーム (ARN) に置き換えてください。ワイルドカード (*) はバケット内のオブジェクトを表します。
重要: バケットポリシーに明示的な拒否ステートメントがあると、アイデンティティベースのポリシーが付与するアクセス許可がブロックされます。バケットポリシーを確認して、アイデンティティベースのポリシーと矛盾する明示的な拒否ステートメントがないことを確認してください。
クロスアカウントアクセス用のアイデンティティベースのポリシーとバケットポリシーを変更する
重要: カスタマーマネージドキーにはクロスアカウントアクセスを許可できますが、AWS マネージドキーには許可できません。AWS マネージドキーのキーポリシーは変更できません。
次の手順を実行します。
-
IAM ユーザーアカウントで IAM コンソールを開きます。
-
以下のポリシーを IAM ユーザーにアタッチして、ユーザーがオブジェクトをアップロードおよびダウンロードし、AWS KMS キーを使用できるようにします。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "DownloadandUpload",
"Action": [
"s3:GetObject",
"s3:GetObjectVersion",
"s3:PutObject",
"s3:PutObjectAcl"
],
"Effect": "Allow",
"Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
},
{
"Sid": "ListBucket",
"Action": [
"s3:ListBucket"
],
"Effect": "Allow",
"Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET"
},
{
"Sid": "KMSAccess",
"Action": [
"kms:Decrypt",
"kms:GenerateDataKey"
],
"Effect": "Allow",
"Resource": "arn:aws:kms:example-region-1:123456789098:key/111aa2bb-333c-4d44-5555-a111bb2c33dd"
}
]
}
注: Resource 値を、バケットの ARN と AWS KMS キーに置き換えてください。ワイルドカード (*) はバケット内のオブジェクトを表します。
-
S3 バケットを所有するアカウントで Amazon S3 コンソールを開きます。
-
バケットポリシーに次のステートメントを追加して、IAM ユーザーにバケットへのアクセス権を付与します。
{
"Id": "Policy1584399307003",
"Version": "2012-10-17",
"Statement": [
{
"Sid": "DownloadandUpload",
"Action": [
"s3:GetObject",
"s3:GetObjectVersion",
"s3:PutObject",
"s3:PutObjectAcl"
],
"Effect": "Allow",
"Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*",
"Principal": {
"AWS": [
"arn:aws:iam::111122223333:user/Jane"
]
}
},
{
"Sid": "ListBucket",
"Action": [
"s3:ListBucket"
],
"Effect": "Allow",
"Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET",
"Principal": {
"AWS": [
"arn:aws:iam::111122223333:user/Jane"
]
}
}
]
}
注: Id をバケットポリシーの ID に、Principal 値を IAM ユーザーの ARN に、Resource 値をバケットの ARN に置き換えてください。
クロスアカウントアクセスに最低限必要なアクセス許可に加えて、s3:PutObjectAcl アクセス許可を付与して、IAM ユーザーがオブジェクトのアクセスコントロールリスト (ACL) を設定できるようにすることができます。次に、bucket-owner-full-control canned ACL をバケットアカウントに付与します。S3 ディレクトリまたはプレフィックスを同期し、バケット間でオブジェクトをコピーするために必要な s3:ListBucket アクセス許可を付与することもできます。
関連情報
キーの有効化と無効化
AWS KMS での IAM ポリシーの使用
Amazon S3 バケットオブジェクトへの読み書きアクセスを付与する
すべての新しいバケットの ACL を無効にし、オブジェクト所有権を執行する