Amazon S3 バケットのアクセス許可 - AWS Config

Amazon S3 バケットのアクセス許可

デフォルトでは、すべての Amazon S3 バケットとオブジェクトはプライベートです。リソース所有者およびバケットを作成した AWS アカウントのみが、バケットにアクセスできます。ただし、リソース所有者は、他のリソースとユーザーにアクセス許可を付与することを選択できます。これを行う 1 つの方法として、アクセスポリシーを記述します。

AWS Config が自動的に Amazon S3 バケットを作成する場合 (AWS Config コンソールを使用して配信チャネルを設定する場合など)、これらのアクセス許可は自動的に Amazon S3 バケットに追加されます。ただし、既存の Amazon S3 バケットを指定した場合は、S3 バケットのアクセス許可が正しいことを確認する必要があります。

注記

オブジェクトはバケットからアクセス許可を継承しません。例えば、バケットを作成してユーザーに書き込みアクセスを許可した場合、そのユーザーから明示的にアクセスが許可されない限り、そのユーザーのオブジェクトにアクセスできません。

IAM ロールの使用時に Amazon S3 バケットに必要なアクセス許可

AWS Config がアカウントの Amazon S3 バケットに設定情報 (履歴ファイルやスナップショット) を送信する場合、AWS Config の設定時に割り当てた IAM ロールを引き受けます。AWS Config が別のアカウントの Amazon S3 バケットに設定情報を送信する場合、最初に IAM ロールの使用を試行します。ただし、バケットのアクセスポリシーが IAM ロールへの WRITE アクセス許可を付与しない場合、この試行は失敗します。この場合、AWS Config は再度情報を送信しますが、今回は AWS Config サービスプリンシパルとして送信します。配信が正常に実行される前に、アクセスポリシーは WRITE アクセス許可を config.amazonaws.com プリンシパル名に付与する必要があります。 AWS Config は S3 バケットに配信するオブジェクトの所有者になります。Amazon S3 バケットへのアクセスを AWS Config に付与するには、以下のステップ 6 で説明したアクセスポリシーを別のアカウントの Amazon S3 バケットにアタッチする必要があります。

AWS Config が Amazon S3 バケットにログを配信する前に、AWS Config は、そのバケットが存在するかどうか、およびどの AWS リージョンにバケットがあるか確認します。AWS Config は Amazon S3 HeadBucket API を呼び出して、バケットが存在するかどうかの確認と、バケットのリージョンの取得を試みます。場所を確認するときに、バケットを見つけるアクセス許可が付与されていない場合は、AccessDenied エラーが AWS CloudTrail ログに記録されます。ただし、バケットの場所へのアクセス許可を付与しない場合、Amazon S3 バケットへのログ配信は成功します。

サービスでリンクされたロールの使用時に Amazon S3 バケットに必要なアクセス許可

AWS Config サービスにリンクされたロールには、Amazon S3 バケットにオブジェクトを配置するアクセス許可がありません。したがって、お客様が AWS Config サービスにリンクされたロールを使用して設定した場合、AWS Config は代わりにAWS Config サービスプリンシパルとして設定項目を送信します。お客様は以下のステップ 6 で説明したアクセスポリシーを自分のアカウント中の Amazon S3 バケットへ添付するか、別のアカウントを Amazon S3 バケットに AWS Config アクセスするのを許可するかする必要があります。

Amazon S3 バケットへのアクセス許可を AWS Config に与える

自分のアカウントまたは別のアカウントの Amazon S3 バケットにアクセスポリシーを追加するには、以下のステップを実行します。このアクセスポリシーにより、AWS Config から Amazon S3 バケットに設定情報を送信できるようになります。

  1. S3 バケットがあるアカウントを使用して AWS Management Console にサインインします。

  2. https://console.aws.amazon.com/s3/ で Amazon S3 コンソールを開きます。

  3. AWS Config で設定項目の配信に使用するバケットを選択し、Properties(プロパティ) を選択します。

  4. [Permissions] (アクセス許可) を選択します。

  5. Edit Bucket Policy を選択します。

  6. 次のポリシーを Bucket Policy Editor ウィンドウ内にコピーします。

    重要

    AWS Config から Amazon S3 バケットへのアクセスを許可する場合のセキュリティのベストプラクティスとして、バケットポリシーで AWS:SourceAccount 条件を使用してアクセスを制限することを強くお勧めします。既存のバケットポリシーがこのセキュリティのベストプラクティスに従わない場合は、この保護を含めるようにバケットポリシーを編集することを強くお勧めします。これにより、AWS Config は想定されるユーザーにのみアクセス権が付与されます。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "AWSConfigBucketPermissionsCheck", "Effect": "Allow", "Principal": { "Service": "config.amazonaws.com" }, "Action": "s3:GetBucketAcl", "Resource": "arn:aws:s3:::targetBucketName", "Condition": { "StringEquals": { "AWS:SourceAccount": "sourceAccountID" } } }, { "Sid": "AWSConfigBucketExistenceCheck", "Effect": "Allow", "Principal": { "Service": "config.amazonaws.com" }, "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::targetBucketName", "Condition": { "StringEquals": { "AWS:SourceAccount": "sourceAccountID" } } }, { "Sid": "AWSConfigBucketDelivery", "Effect": "Allow", "Principal": { "Service": "config.amazonaws.com" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::targetBucketName/[optional] prefix/AWSLogs/sourceAccountID/Config/*", "Condition": { "StringEquals": { "s3:x-amz-acl": "bucket-owner-full-control", "AWS:SourceAccount": "sourceAccountID" } } } ] }
    注記

    AWS Config は AWS が所有していますが、AWS アカウントの 1 つ、またはお客様のAWS 組織内でリンクされたアカウントに特別に属するものではありません。これは、AWS Config が構成項目を AWS Config サービスプリンシパル (セットアップ時に割り当てた IAM ロールなどとして送信する場合、AWS Config はバケットへの WRITE アクセス権がないか、または AWS Config をセットアップしてサービスにリンクされたロールを使用する場合)、サービスは組織 ID または組織ユニットベースの条件では機能しません。

    注記

    AWS Config サービスプリンシパル名 (SPN) ではなく、IAM ロールにアクセス許可を与える場合、クロスアカウントバケットで IAM ロールに PutObjectACL アクセス許可が与えられていることを確認し、不十分なアクセス許可エラーが発生しないようにしてください。 Amazon S3 バケットの IAM ロールポリシー で IAM ロールのポリシーの例を参照してください。

  7. バケットポリシーの以下の値を置き換えます。

    • targetBucketName – AWS Config から設定を配信する先の Amazon S3 バケット名。

    • [optional] prefix – オプションで Amazon S3 にオブジェクトキーに追加するプレフィックス。バケット内でフォルダのような構成を作成するのに役立ちます。

    • sourceAccountID-WithoutHyphens – AWS Config がターゲットバケットに設定項目を配信するためのアカウントの ID。

  8. SaveClose の順に選択します。

上記の Amazon S3 バケットポリシーの AWS:SourceAccount 条件を使用し Config サービスプリンシパルが特定のアカウントに代わってオペレーションを実行するときに、 Amazon S3 バケットのみと交信するように制限することができます。AWS Config 同じ組織から多くのアカウントを設定して設定アイテムを単一の Amazon S3 バケットに配信する予定があるのであれば、サービスにリンクされたロールではなく IAM ロールを使用してなどの条件キーを使うことをお勧めします。そうすれば AWS Organizations のような AWS:PrincipalOrgID 条件キーが使えます。AWS Config とともに使用する IAM ロールのアクセス権限の管理の詳細については、[AWS Config に割り当てられている IAM ロールのアクセス許可]を参照してください。AWS Organizations のためのアクセス許可の管理の詳細については、「お客様の AWS 組織のアクセス許可」を参照してください。

特定のAWS Config 配信チャネルの代わりにオペレーションを実行するときに、AWS:SourceArn は設定 サービスプリンシパルが Amazon S3 バケットとだけ交信するように制限するAWS Config 条件もサポートします。AWS Config サービスプリンシパルを使用する場合、AWS:SourceArn プロパティは常に arn:aws:config:sourceRegion:sourceAccountID:* が配信チャネルのリージョンがある sourceRegion に設定され、sourceAccountID は配信チャネルを含むアカウントの ID になります。AWS Config 配信チャンネルの詳細については、「配信チャネルの管理」を参照してください。たとえば、以下の条件を追加すると、アカウント us-east-1123456789012リージョン中の送信チャンネルに代わってのみ、Config サービスプリンシパルが Amazon S3 バケットと交信するように制限します: "ArnLike": {"AWS:SourceArn": "arn:aws:config:us-east-1:123456789012:*"}