スキップしてコンテンツを表示

カスタマーマネージの AWS KMS キーで暗号化した Amazon S3 バケットへのダウンロードとアップロードをユーザーに許可する方法を教えてください。

所要時間2分
0

Amazon Simple Storage Service (Amazon S3) バケットを、カスタマーマネージの AWS Key Management Service (AWS KMS) キーでデフォルトの暗号化を使用するように設定しました。AWS Identity and Access Management (IAM) ユーザーがバケットからオブジェクトをダウンロードしたり、バケットにオブジェクトをアップロードしたりできるようにしたいと考えています。

解決策

まず、AWS KMS キーポリシーを変更します。次に、IAM ユーザーのアイデンティティベースのポリシーを変更します。IAM ユーザーが S3 バケットとは異なるアカウントにいる場合は、バケットポリシーも変更する必要があります。

キーポリシーを変更する

次の手順を実行します。

  1. AWS KMS コンソールを開きます。

  2. ナビゲーションペインで [カスタマーマネージドキー] を選択し、キーのリストから目的のキーを選択します。

  3. [キーポリシー] タブを選択してポリシードキュメントを表示します。
    注: AWS KMS コンソールを使用してカスタマーマネージドキーを作成した場合は、[キーポリシー] タブの [ポリシービューへの切り替え] を選択してポリシードキュメントを表示する必要があります。

  4. [編集] を選択し、キーポリシーに次のステートメントを追加して kms:GenerateDataKeykms:Decrypt のアクセス許可を付与します。

    {
      "Sid": "ExampleStmt",
      "Action": [
        "kms:Decrypt",
        "kms:GenerateDataKey"
      ],
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::111122223333:user/Jane"
      },
      "Resource": "*"
    }

    注: 前述のポリシーステートメントの例には、暗号化された S3 バケットにオブジェクトをダウンロードおよびアップロードするために最低限必要なアクセス許可のみが含まれています。ご自身のユースケースに基づいてさらにアクセス許可を追加できます。

同じアカウントアクセス用のアイデンティティベースのポリシーを変更する

次の手順を実行します。

  1. IAM コンソールを開きます。

  2. 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 マネージドキーのキーポリシーは変更できません。

次の手順を実行します。

  1. IAM ユーザーアカウントで IAM コンソールを開きます。

  2. 以下のポリシーを 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 キーに置き換えてください。ワイルドカード (*) はバケット内のオブジェクトを表します。

  3. S3 バケットを所有するアカウントで Amazon S3 コンソールを開きます。

  4. バケットポリシーに次のステートメントを追加して、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 を無効にし、オブジェクト所有権を執行する

AWS公式更新しました 10ヶ月前
コメントはありません

関連するコンテンツ