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

AWS KMS カスタマーマネージドキーで暗号化した Amazon S3 オブジェクトにクロスアカウントユーザーがアクセスすると、Access Denied エラーが発生する理由を教えてください。

所要時間2分
0

ユーザーが別の AWS アカウントから Amazon Simple Storage Service (Amazon S3) バケットにアクセスしたときに表示される "Access Denied" エラーを解決したいと考えています。Amazon S3 バケットを AWS Key Management Service (AWS KMS) のカスタマーマネージドキーで暗号化しています。

概要

注: AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、「AWS CLI のエラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。

次の理由により、ユーザーに "Access Denied" エラーが表示されます。

  • AWS Identity and Access Management (IAM) ユーザーまたはロールに、s3:GetBucketPolicys3:PutBucketPolicy API オペレーションに対するアクセス許可がない。
  • バケットポリシーが、s3:GetBucketPolicy および s3:PutBucketPolicy に対する IAM ID アクセス許可を拒否している。
  • バケットの Amazon S3 パブリックアクセスブロック機能が有効になっている。
  • AWS Organizations のサービスコントロールポリシー (SCP) が Amazon S3 へのアクセスを許可していない。

上記の問題を解決するには、次のトラブルシューティング手順を実行してください。

解決策

s3:GetBucketPolicy と s3:PutBucketPolicy に対するアクセス許可を確認する

次の手順を実行します。

  1. IAM コンソールを開きます。
  2. ナビゲーションペインで、バケットポリシーへのアクセスに使用する [ユーザー][ロール] などの ID を選択します。
  3. バケットポリシーへのアクセスに使用する IAM ID 名を選択します。
  4. IAM ID の [アクセス許可] タブで各ポリシーを展開し、その JSON ポリシードキュメントを表示します。
  5. JSON ポリシードキュメントで、Amazon S3 アクセスに関連するポリシーを検索してください。次に、バケットに対する s3:GetBucketPolicy アクションと s3:PutBucketPolicy アクションに対するアクセス許可があることを確認します。<br id=hardline_break/> 注: s3:GetBucketPolicys3:PutBucketPolicy アクションを含むポリシーがない場合は、これらのアクセス許可をポリシーに追加します。IAM アクセス許可を更新する手順については、「IAM ユーザーのアクセス許可を変更する」を参照してください。<br id=hardline_break/> 次の IAM ポリシーの例では、IAM ID が DOC-EXAMPLE-BUCKET に対して s3:GetBucketPolicy アクションと s3:PutBucketPolicy アクションの実行を許可しています。
    {  "Version": "2012-10-17",  
      "Statement": [  
        {  
          "Sid": "ModifyBucketPolicy",  
          "Action": [  
            "s3:GetBucketPolicy",  
            "s3:PutBucketPolicy"  
          ],  
          "Effect": "Allow",  
          "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET"  
        },  
        {  
          "Sid": "AccessS3Console",  
          "Action": [  
            "s3:GetBucketLocation",  
            "s3:ListAllMyBuckets"  
          ],  
          "Effect": "Allow",  
          "Resource": "arn:aws:s3:::*"  
        }  
      ]  
    }
    注: 前述の IAM ポリシーの AccessS3console ステートメントは、Amazon S3 にコンソールへのアクセスを許可しています。バケットポリシーの変更に固有のものではありません。
  6. JSON ポリシードキュメントから、以下を含むステートメントを検索します。"Effect": "Deny"。次に、これらのステートメントが s3:GetBucketPolicy または s3:PutBucketPolicy への IAM ID アクセスを拒否していないことを確認します。
  7. ポリシーの [リソース] セクションには、バケットの Amazon リソースネーム (ARN) を必ず含めてください。前の例では、ARN は aws:s3:::DOC-EXAMPLE-BUCKET です。<br id=hardline_break/> ** 注: **これは、s3:GetBucketPolicys3:PutBucketPolicy がバケットレベルのアクションであるためです。
  8. s3:GetBucketPolicys3:PutBucketPolicy アクションを制限する aws:SourceIP などのグローバル条件を IAM ポリシーに適用していないかどうかを確認します。条件によってアクセスが制限される場合は、それらの条件を削除または更新してください。

バケットポリシーが存在しない場合は追加する

s3:GetBucketPolicy または s3:PutBucketPolicy のアクセス許可を付与するポリシーが見つからない場合は、IAM ID にそれらのアクセス許可を付与するポリシーを追加します。s3:GetBucketPolicy または s3:PutBucketPolicy へのアクセスを拒否するポリシーが見つかった場合は、それらのポリシーを削除します。

バケットへのアクセス許可を持つ別の IAM ID を使用してバケットポリシーを変更する

次の手順を実行します。

  1. Amazon S3 コンソールを開きます。
  2. 左側のナビゲーションペインで、[汎用バケット] または [ディレクトリバケット] を選択します。
  3. バケットのリストから、変更するバケットポリシーを含むバケットを開きます。
  4. [アクセス許可] タブを選択します。
  5. [バケットポリシー] を選択します。
  6. 以下のステートメントを検索します。"Effect": "Deny"
  7. 次のステートメントを更新するようにバケットポリシーを編集します: "Effect": "Deny" ステートメント (IAM ID による s3:GetBucketPolicy または s3:PutBucketPolicy へのアクセスを拒否するすべての同ステートメント)。
  8. バケットポリシーに、IAM エンティティに対する s3:GetBucketPolicy アクションと s3:PutBucketPolicy アクションを制限する aws:PrincipalArn などの条件が含まれているかどうかを確認します。条件によってアクセスが制限される場合は、それらの条件を削除または更新してください。

すべてのアクセスを拒否するバケットポリシーを削除して再作成する

s3:GetBucketPolicys3:PutBucketPolicy、またはすべての Amazon S3 アクション (s3:*) にどのユーザーもアクセスできない場合は、delete-bucket-policy AWS CLI コマンドを使用してポリシーを削除します。

delete-bucket-policy   
-bucket example_bucket

注: example_bucket は、実際のバケットの名前に置き換えます。

誤ってバケットからロックアウトされてバケットポリシーを削除できない場合は、バケットへのアクセスを回復してください。バケットポリシーを削除したら、新しいポリシーを作成できます。

Amazon S3 パブリックアクセスブロックを無効にする

バケットポリシーでパブリックアクセスが許可されている場合は、バケットの Amazon S3 パブリックアクセスブロックを無効にします。詳細については、「Amazon S3 ストレージへのパブリックアクセスのブロック」と「『パブリック』の意味」を参照してください。

注: プライベートバケットへのパブリックアクセスを防ぐには、AWS アカウントレベルで非アクティブにする前に、バケットの Amazon S3 パブリックアクセスブロックを有効にしてください。

AWS Organizations の場合は、Amazon S3 へのアクセスを許可しない SCP を削除してください

AWS Organizations を使用している場合は、サービス (SCP) を確認してください。s3:PutBucketPolicy アクションまたはその他の Amazon S3 ポリシーアクションを明示的に拒否するステートメントを検索してください。組織がポリシーを必要としない場合は、s3:* アクションに拒否効果を適用する SCP を削除します。

次のポリシー例では、すべての Amazon S3 アクションへのアクセスを拒否します。

{  "Version": "2012-10-17",  
  "Statement": [  
    {  
      "Effect": "Deny",  
      "Action": "s3:*",  
      "Resource": "*"  
    }  
  ]  
}
コメントはありません

関連するコンテンツ