のアクセス許可ポリシーの例 AWS Secrets Manager - AWS Secrets Manager

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

のアクセス許可ポリシーの例 AWS Secrets Manager

アクセス許可ポリシーは JSON 構造化テキストです。「JSON policy document structure」(JSON ポリシードキュメント構造) を参照してください。

リソースやアイデンティティにアタッチするアクセス許可ポリシーは、互いに非常によく似ています。シークレットにアクセスするためにポリシーに含める要素には、次のようなものがあります。

  • Principal: アクセス許可を付与するユーザー。「IAM ユーザーガイド」の「Specifying a principal」(プリンシパルの指定) を参照してください。ポリシーをアイデンティティにアタッチする場合、ポリシーに Principal 要素は含めません。

  • Action: ロールが実行できるアクション。「Secrets Manager のアクション」を参照してください。

  • Resource: ロールがアクセスできるシークレット。Secrets Manager リソース を参照してください。

    ワイルドカード文字 (*) の意味は、ポリシーをアタッチする内容によって異なります。

    • シークレットにアタッチされたポリシーでは、* は、ポリシーがこのシークレットに適用されることを意味します。

    • アイデンティティにアタッチされたポリシーでは、* は、ポリシーがアカウント内のすべてのリソース (シークレットを含む) に適用されることを意味します。

ポリシーをシークレットにアタッチするには、アクセス許可ポリシーを AWS Secrets Manager シークレットにアタッチする を参照してください。

ポリシーをアイデンティティにアタッチするには、アクセス許可ポリシーをアイデンティティにアタッチする を参照してください。

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

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

次の例は、シークレットへのアクセスを許可する 2 つの異なる方法を示しています。最初の例は、シークレットにアタッチできるリソースベースのポリシーです。この例は、単一のシークレットへのアクセスを複数のユーザーまたはロールに付与する場合に役立てることができます。2 番目の例は、IAM のユーザーまたはロールにアタッチできるアイデンティティベースのポリシーです。この例は、IAM グループにアクセス許可を付与する場合に役立てることができます。バッチ API コールでシークレットのグループを取得するためのアクセス許可を付与するには、「例: バッチ内のシークレット値のグループを取得するアクセス許可」を参照してください。

例 1 つのシークレットを読み取る (シークレットにアタッチする)

シークレットに次のポリシーをアタッチすると、シークレットへのアクセスを許可することができます。このポリシーを使用するには、「アクセス許可ポリシーを AWS Secrets Manager シークレットにアタッチする」を参照してください。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::AccountId:role/EC2RoleToAccessSecrets" }, "Action": "secretsmanager:GetSecretValue", "Resource": "*" } ] }
例 カスタマーマネージドキー (ID にアタッチ) を使用して暗号化されたシークレットを読み込む

シークレットがカスタマーマネージドキーを使用して暗号化されている場合、ID に次のポリシーをアタッチすることで、シークレットの読み取りを許可できます。このポリシーを使用するには、「アクセス許可ポリシーをアイデンティティにアタッチする」を参照してください。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "secretsmanager:GetSecretValue", "Resource": "SecretARN" }, { "Effect": "Allow", "Action": "kms:Decrypt", "Resource": "KMSKeyARN" } ] }

例: 個々のシークレットを読み書きするアクセス許可

例 1 つのシークレットを読み取って記述する (アイデンティティにアタッチする)

次のポリシーをアイデンティティにアタッチすると、シークレットへのアクセスを許可することができます。このポリシーを使用するには、「アクセス許可ポリシーをアイデンティティにアタッチする」を参照してください。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue", "secretsmanager:DescribeSecret" ], "Resource": "SecretARN" } ] }

例: バッチ内のシークレット値のグループを取得するアクセス許可

例 バッチ内のシークレットのグループを読み取る (アイデンティティにアタッチする)

次のポリシーをアイデンティティにアタッチすると、バッチ API コールのシークレットのグループを取得するためのアクセス許可を付与できます。このポリシーは、バッチコールに他のシークレットが含まれていても、SecretARN1SecretARN2SecretARN3 で指定されたシークレットのみを取得できるように呼び出し元を制限します。呼び出し元がバッチ API コールで他のシークレットもリクエストしたとしても、Secrets Manager はそれらを返しません。詳細については、「」を参照してくださいBatchGetSecretValueこのポリシーを使用するには、「アクセス許可ポリシーをアイデンティティにアタッチする」を参照してください。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "secretsmanager:BatchGetSecretValue", "secretsmanager:ListSecrets" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue" ], "Resource": [ "SecretARN1", "SecretARN2", "SecretARN3" ] } ] }

例: ワイルドカード

ワイルドカードを使用して、ポリシーの要素に値のセットを含めることができます。

例 パス内のすべてのシークレットにアクセスする (アイデンティティにアタッチする)

次のポリシーは、TestEnv「/」で始まる名前のすべてのシークレットを取得するアクセスを許可します。このポリシーを使用するには、「アクセス許可ポリシーをアイデンティティにアタッチする 」を参照してください。

{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "secretsmanager:GetSecretValue", "Resource": "arn:aws:secretsmanager:Region:AccountId:secret:TestEnv/*" } }
例 すべてのシークレットのメタデータへのアクセス (アイデンティティにアタッチする)

以下のポリシーは、DescribeSecret および List で始まるアクセス許可 (ListSecrets および ListSecretVersionIds) を付与します。このポリシーを使用するには、「アクセス許可ポリシーをアイデンティティにアタッチする」を参照してください。

{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": [ "secretsmanager:DescribeSecret", "secretsmanager:List*" ], "Resource": "*" } }
例 シークレット名が一致する (アイデンティティにアタッチする)

次のポリシーは、Secrets Manager のシークレット名へのすべてのアクセス許可を付与します。このポリシーを使用するには、「アクセス許可ポリシーをアイデンティティにアタッチする」を参照してください。

シークレット名を照合するには、リージョン、アカウント ID、シークレット名、ワイルドカード (?) を組み合わせてシークレットの ARN を作成し、個々のランダムな文字に一致させます。Secrets Manager は、ARN の一部としてシークレット名に 6 つのランダムな文字を追加するため、このワイルドカードを使用してこれらの文字に一致させることができます。"another_secret_name-*" 構文を使用した場合、Secrets Manager は、意図した 6 つのランダムの文字があるシークレットだけでなく、"another_secret_name-<anything-here>a1b2c3" にも一致します。

シークレットの ARN の 6 つのランダムな文字以外のすべての部分を予測できるため、ワイルドカード文字の '??????' 構文を使用することで、まだ存在していないシークレットに安全にアクセス許可を付与することができます。ただし、シークレットを削除して同じ名前で再作成すると、6 つの文字が変更されたにもかかわらず、ユーザーが自動的に新しいシークレットへのアクセス許可を受け取ることに注意してください。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "secretsmanager:*", "Resource": [ "arn:aws:secretsmanager:Region:AccountId:secret:a_specific_secret_name-a1b2c3", "arn:aws:secretsmanager:Region:AccountId:secret:another_secret_name-??????" ] } ] }

例: シークレットを作成するアクセス許可

シークレットを作成するアクセス許可を付与するには、ユーザーが属する IAM グループにアクセス許可ポリシーをアタッチすることをお勧めします。「IAM ユーザーグループ」を参照してください。

例 シークレットを作成する (アイデンティティにアタッチする)

次のポリシーは、シークレットを作成してシークレットのリストを表示するアクセス許可を付与します。このポリシーを使用するには、「アクセス許可ポリシーをアイデンティティにアタッチする」を参照してください。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "secretsmanager:CreateSecret", "secretsmanager:ListSecrets" ], "Resource": "*" } ] }

例: シークレットを暗号化するための特定の AWS KMS キーを拒否する

重要

カスタマーマネージドキーを拒否するには、キーポリシーまたはキー許可を使用してアクセスを制限することをお勧めします。詳細については、「 AWS Key Management Service デベロッパーガイド」の「 の認証とアクセスコントロール AWS KMS」を参照してください。

例 AWS マネージドキーを拒否する aws/secretsmanager (ID にアタッチする)

次のポリシーは、シークレットを作成または更新aws/secretsmanagerするための AWS マネージドキーの使用を拒否する方法を示しています。つまり、シークレットはカスタマーマネージドキーを使用して暗号化する必要があります。aws/secretsmanager キーが存在する場合は、そのキー ID も含める必要があります。Secrets Manager はそれを AWS マネージドキー として解釈するため、空の文字列も含めますaws/secretsmanager。2 番目のステートメントは、KMS キーを含まないシークレットを作成するリクエストを拒否します。これは、Secrets Manager がそれを AWS マネージドキー として解釈するためですaws/secretsmanager

{ "Version": "2012-10-17", "Statement": [ { "Sid": "RequireCustomerManagedKeysOnSecrets", "Effect": "Deny", "Action": [ "secretsmanager:CreateSecret", "secretsmanager:UpdateSecret" ], "Resource": "*", "Condition": { "ForAnyValue:StringLikeIfExists": { "secretsmanager:KmsKeyId": [ "*alias/aws/secretsmanager", "*<key_ID_of_the_AWS_managed_key>", "" ] } } }, { "Sid": "RequireKmsKeyIdParameterOnCreate", "Effect": "Deny", "Action": "secretsmanager:CreateSecret", "Resource": "*", "Condition": { "Null": { "secretsmanager:KmsKeyId": "true" } } } ] }

例: アクセス許可と VPC

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

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

例 VPC エンドポイントを通過するようリクエストを要求する (シークレットにアタッチする)

例えば、次のポリシーでは、リクエストが VPC エンドポイント vpce-1234a5678b9012c を通過して送信されている場合にのみ、ユーザーが Secrets Manager オペレーションを実行できます。このポリシーを使用するには、「アクセス許可ポリシーを AWS 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 を使用します。このポリシーを使用するには、「アクセス許可ポリシーを AWS Secrets Manager シークレットにアタッチする」を参照してください。

{ "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" } } } ] }

例: タグを使用してシークレットへのアクセスを制御する

タグを使用してシークレットへのアクセスを制御することができます。タグを使用したアクセス許可の制御は、急速に成長している環境や、ポリシー管理が煩雑になっている状況で役に立ちます。シークレットに特定のタグがある場合、1 つの方法として、シークレットにタグをアタッチしてから、アイデンティティにアクセス許可を付与することができます。

例 特定のタグを持つシークレットへのアクセスを許可する (アイデンティティにアタッチする)

次のポリシーでは、キーServerName「」と値ServerABC」のタグを持つシークレットDescribeSecretに対して を許可します。このポリシーを使用するには、「アクセス許可ポリシーをアイデンティティにアタッチする」を参照してください。

{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "secretsmanager:DescribeSecret", "Resource": "*", "Condition": { "StringEquals": { "secretsmanager:ResourceTag/ServerName": "ServerABC" } } } }

例: シークレットのタグに一致しているタグを持つアイデンティティへのアクセスを制限する

1 つの方法として、シークレットと IAM アイデンティティの両方にタグをアタッチすることができます。次に、アイデンティティのタグがシークレットのタグと一致している場合にオペレーションを許可するアクセス許可ポリシーを作成します。完全なチュートリアルについては、「タグに基づいてシークレットにアクセスするためのアクセス許可を定義する」を参照してください。

タグを使用したアクセス許可の制御は、急速に成長している環境や、ポリシー管理が煩雑になっている状況で役に立ちます。詳細については、「AWSの ABAC とは」を参照してください。

例 シークレットと同じタグを持つロールへのアクセスを許可する (シークレットにアタッチする)

以下のポリシーは、タグ AccessProject がシークレットとロールに対して同じ値を持つ場合にのみ、アカウント 123456789012GetSecretValue を付与します。このポリシーを使用するには、「アクセス許可ポリシーを AWS Secrets Manager シークレットにアタッチする」を参照してください。

{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Principal": { "AWS": "123456789012" }, "Condition": { "StringEquals": { "aws:ResourceTag/AccessProject": "${ aws:PrincipalTag/AccessProject }" } }, "Action": "secretsmanager:GetSecretValue", "Resource": "*" } }

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

シークレットにアタッチされたリソースポリシーに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" } } } ] }