リソースベースのポリシー - AWS Secrets Manager

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

リソースベースのポリシー

リソースベースのポリシーで、シークレットにアクセスできるユーザーと、ユーザーがそのシークレットで実行できるアクションを指定します。リソースベースのポリシーを使用して、以下を行うことができます。

  • 単一のシークレットへのアクセスを複数のユーザーまたはロールに許可します。

  • 他の AWS アカウントのユーザーまたはロールへのアクセス許可を付与します。

コンソールでリソースベースのポリシーをシークレットにアタッチすると、Secrets Manager は自動化された推論エンジン Zelkova と API ValidateResourcePolicy を使用して、シークレットへのアクセス許可を幅広い範囲の IAM プリンシパルに付与しないようにします。または、CLI または SDK からの BlockPublicPolicy パラメータを含む PutResourcePolicy API を呼び出しします。

重要

リソースポリシーの検証と BlockPublicPolicy パラメータは、シークレットに直接アタッチされているリソースポリシーを通じてパブリックアクセスが付与されないようにすることで、リソースを保護するのに役立ちます。これらの機能を利用したうえでさらに、次のポリシーを注意深く調べて、パブリックアクセスが許可されていないことを確かめてください。

  • 関連する AWS プリンシパル (IAM ロールなど) にアタッチされているアイデンティティベースのポリシー

  • 関連する AWS リソース ( AWS Key Management Service (AWS KMS) キーなど) にアタッチされているリソースベースのポリシー

シークレットへのアクセス許可を確認するには、「 シークレットへのアクセス許可を持つユーザーを特定する」を参照してください。

シークレットのリソースポリシーを表示、変更、または削除するには (コンソール)
  1. Secrets Manager のコンソール (https://console.aws.amazon.com/secretsmanager/) を開きます。

  2. シークレットのリストから、自分のシークレットを選択します。

  3. シークレットの詳細ページの [概要] タブの [リソース許可] セクションで、[許可を編集] を選択します。

  4. [Code] (コード) フィールドで、次のいずれかの操作を行い、[Save] (保存する) をクリックします。

    • リソースポリシーをアタッチまたは変更するには、ポリシーを入力します。

    • ポリシーを削除するには、[Code] (コード) フィールドをクリアします。

AWS CLI

例 リソースポリシーを取得する

次に、シークレットにアタッチされたリソースベースのポリシーを取得する、get-resource-policy の例を示します。

aws secretsmanager get-resource-policy \ --secret-id MyTestSecret
例 リソースポリシーを削除する

次に、シークレットにアタッチされているリソースベースのアポリシーを削除する、delete-resource-policy の例を示します。

aws secretsmanager delete-resource-policy \ --secret-id MyTestSecret
例 リソースポリシーを追加する

次の put-resource-policy の例では、ポリシーが広範なアクセスをシークレットに提供していないことを最初に確認しながら、シークレットに許可ポリシーを追加しています。このポリシーは、ファイルから読み込まれます。詳細については、「AWS CLI ユーザーガイド」の「ファイルから AWS CLI パラメータをロードする」を参照してください。

aws secretsmanager put-resource-policy \ --secret-id MyTestSecret \ --resource-policy file://mypolicy.json \ --block-public-policy

mypolicy.json の内容:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:role/MyRole" }, "Action": "secretsmanager:GetSecretValue", "Resource": "*" } ] }

AWS SDK

シークレットにアタッチされているポリシーを取得するには、GetResourcePolicy を使用します。

シークレットにアタッチされているポリシーを削除するには、DeleteResourcePolicy を使用します。

ポリシーをシークレットにアタッチするには、PutResourcePolicy を使用します。ポリシーがすでにアタッチされている場合、コマンドはそのポリシーを新しいポリシーに置き換えます。ポリシーは、JSON 構造化テキストとしてフォーマットする必要があります。JSON ポリシードキュメント構造を参照してください。

詳細については、「AWS SDKs」を参照してください。

例: 個別のシークレット値を取得するためのアクセス許可

シークレット値を取得するアクセス許可を付与するには、ポリシーをシークレットまたはアイデンティティにアタッチできます。使用するポリシーの種類を決定する方法については、「アイデンティティベースのポリシーおよびリソースベースのポリシー」を参照してください。ポリシーをアタッチする方法については、リソースベースのポリシー および アイデンティティベースのポリシー を参照してください。

この例は、単一のシークレットへのアクセスを複数のユーザーまたはロールに付与する場合に役立てることができます。バッチ API コールでシークレットのグループを取得するためのアクセス許可を付与するには、「例: バッチでシークレット値のグループを取得するためのアクセス許可」を参照してください。

例 シークレットを 1 つ読み取る

シークレットに次のポリシーをアタッチすると、シークレットへのアクセスを許可することができます。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::AccountId:role/EC2RoleToAccessSecrets" }, "Action": "secretsmanager:GetSecretValue", "Resource": "*" } ] }

例: アクセス許可と VPC

VPC 内からSecrets Manager にアクセスする必要がある場合は、アクセス許可ポリシーに条件を含めることで、Secret Manager へのリクエストが VPC から確実に送信されるようにすることができます。詳細については、VPC エンドポイント条件でリクエストを制限するおよびAWS Secrets Manager VPC エンドポイントの使用を参照してください。

他の AWS サービスからシークレットにアクセスするリクエストも VPC から送信されていることを確認してください。そうしない場合、このポリシーによりアクセスが拒否されます。

例 リクエストが VPC エンドポイント経由で送信されるように要求する

例えば、次のポリシーでは、リクエストが VPC エンドポイント vpce-1234a5678b9012c を通過して送信されている場合にのみ、ユーザーが Secrets Manager オペレーションを実行できます。

{ "Id": "example-policy-1", "Version": "2012-10-17", "Statement": [ { "Sid": "RestrictGetSecretValueoperation", "Effect": "Deny", "Principal": "*", "Action": "secretsmanager:GetSecretValue", "Resource": "*", "Condition": { "StringNotEquals": { "aws:sourceVpce": "vpce-1234a5678b9012c" } } } ] }
例 リクエストが VPC から送信されるように要求する

次のポリシーでは、シークレットを作成および管理するコマンドが許可されるのは、そのコマンドが vpc-12345678 から送信されている場合のみです。また、このポリシーでは、リクエストが vpc-2b2b2b2b から届いた場合にのみ、シークレットの暗号化された値へのアクセスを使用するオペレーションを許可します。1 つの VPC でアプリケーションを実行する場合は、このようなポリシーを使用できますが、管理機能には 2 番目の切り離された VPC を使用します。

{ "Id": "example-policy-2", "Version": "2012-10-17", "Statement": [ { "Sid": "AllowAdministrativeActionsfromONLYvpc-12345678", "Effect": "Deny", "Principal": "*", "Action": [ "secretsmanager:Create*", "secretsmanager:Put*", "secretsmanager:Update*", "secretsmanager:Delete*", "secretsmanager:Restore*", "secretsmanager:RotateSecret", "secretsmanager:CancelRotate*", "secretsmanager:TagResource", "secretsmanager:UntagResource" ], "Resource": "*", "Condition": { "StringNotEquals": { "aws:sourceVpc": "vpc-12345678" } } }, { "Sid": "AllowSecretValueAccessfromONLYvpc-2b2b2b2b", "Effect": "Deny", "Principal": "*", "Action": [ "secretsmanager:GetSecretValue" ], "Resource": "*", "Condition": { "StringNotEquals": { "aws:sourceVpc": "vpc-2b2b2b2b" } } } ] }

例:サービスプリンシパル

シークレットにアタッチされているリソースポリシーにAWS サービスプリンシパルが含まれている場合は、aws:SourceArn そして aws:SourceAccount グローバル条件キーの使用をお勧めします。ARN とアカウントの値は、別のAWSサービスから Secrets Manager にリクエストが来たときにのみ、承認コンテキストに含まれます。この条件の組み合わせにより、混同される可能性のある副次的なシナリオを回避することができます。

リソース ARN にリソースポリシーで許可されていない文字が含まれている場合、そのリソース ARN を aws:SourceArn 条件キーの値として使用することはできません。その代わりに aws:SourceAccount 条件キーを使用してください。その他の要件の詳細については、「IAM requirements」(IAMの要件) を参照してください。

サービスプリンシパルは、通常、シークレットにアタッチされたポリシーではプリンシパルとして使用されませんが、AWS サービスにはそれが必要です。サービスがシークレットにアタッチする必要があるリソースポリシーの詳細については、サービスのドキュメントを参照してください。

例 サービスプリンシパルを使用して、サービスがシークレットにアクセスできるようにする
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "service-name.amazonaws.com" ] }, "Action": "secretsmanager:GetSecretValue", "Resource": "*", "Condition": { "ArnLike": { "aws:sourceArn": "arn:aws:service-name::123456789012:*" }, "StringEquals": { "aws:sourceAccount": "123456789012" } } } ] }