本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
權限原則範例 AWS Secrets Manager
許可政策是 JSON 結構化文字。請參閱 JSON 政策文件結構。
連接至資源和身分的許可政策非常相似。您在政策中包含以存取秘密的一些元素包括:
-
Principal
:授予存取權的人。請參閱 IAM 使用者指南中的指定委託人。將政策連接到身分時,您不會在該政策中包含Principal
元素。 -
Action
:他們可以做什麼。請參閱Secrets Manager 動作。 -
Resource
:他們可以存取哪些秘密。請參閱 Secrets Manager 資源。萬用字元 (*) 具有不同的意義,具體意義視政策的連接目標而定:
-
在連接至秘密的政策中,
*
表示該政策適用於此秘密。 -
在連接至身分的政策中,
*
表示該政策適用於帳戶中的所有資源 (包括秘密)。
-
若要將政策連接至秘密,請參閱 將許可政策連接至 AWS Secrets Manager 秘密。
若要將政策連接至身分,請參閱 將許可政策連接至身分。
主題
範例:擷取每個秘密值的許可
若要授予擷取秘密值的許可,您可以將政策連接至秘密或身分。如需判斷要使用哪種政策的說明,請參閱身分型政策和資源型政策。如需連接政策的相關資訊,請參閱 將許可政策連接至 AWS Secrets Manager 秘密 和 將許可政策連接至身分。
下列範例展示了授予對秘密的存取權的兩種不同方式。第一個範例是您可以連接至秘密的資源型政策。如果想要將對單一秘密的存取權授予多個使用者或角色,此範例非常有用。第二個範例是身分型政策,您可以將其連接至 IAM 中的使用者或角色。如果想要將存取權授予 IAM 群組,此範例很有用。若要授與批次 API 呼叫中擷取一組秘密的權限,請參閱範例:在批次中擷取一組密碼值的權限。
範例 讀取一個秘密 (連接至秘密)
您可以透過將下列政策連接至秘密,授予對秘密的存取權。若要使用此政策,請參閱 將許可政策連接至 AWS Secrets Manager 秘密。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::
AccountId
:role/EC2RoleToAccessSecrets
" }, "Action": "secretsmanager:GetSecretValue", "Resource": "*" } ] }
範例 讀取使用客戶管理的金鑰 (連接至身分) 加密的秘密
如果秘密是以客戶受管金鑰加密,您可以將下列政策連接至身分,授予讀取秘密的存取權。若要使用此政策,請參閱 將許可政策連接至身分。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "secretsmanager:GetSecretValue", "Resource": "
SecretARN
" }, { "Effect": "Allow", "Action": "kms:Decrypt", "Resource": "KMSKeyARN
" } ] }
範例:讀取和描述個別機密的權限
範例 閱讀並描述一個秘密(附加到身份)
您可以透過將下列政策連接至身分,授予對秘密的存取權。若要使用此政策,請參閱 將許可政策連接至身分。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue", "secretsmanager:DescribeSecret" ], "Resource": "
SecretARN
" } ] }
範例:在批次中擷取一組密碼值的權限
範例 讀取批次中的秘密群組 (連接至身分)
您可以透過將下列政策連接至身分,授予在 API 呼叫擷取一組秘密的存取權。此原則會限制呼叫者,以便他們只能擷取 SecretARN1
、SecretARN2
和 SecretARN3
所指定的密碼,即使批次呼叫包含其他機密也是如此。如果呼叫者也要求批次 API 呼叫中的其他秘密,秘密管理員將不會傳回它們。如需詳細資訊,請參閱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 的一部分,因此您可以使用此萬用字元來比對那些字元。如果您使用的是語法 "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
(附加至身分識別)
下列原則顯示如何拒絕使用 AWS 受管理的金鑰來aws/secretsmanager
建立或更新密碼。這表示密碼必須使用客戶管理的金鑰加密。如果aws/secretsmanager
金鑰存在,您也必須包含其金鑰 ID。您也會包含空字串,因為 Secrets Manager 會將該字串解譯為 AWS 受管理的金鑰aws/secretsmanager
。第二個陳述式會拒絕要求建立不包含 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,則可以透過在許可政策中包含條件,來確保對 Secrets Manager 的請求都來自 VPC。如需更多詳細資訊,請參閱 VPC 端點條件 及 使用 AWS Secrets Manager VPC 端點。
確保從其他 AWS 服務訪問密碼的請求也來自 VPC,否則此策略將拒絕他們訪問。
範例 要求請求透過 VPC 端點提出 (連接至秘密)
例如,以下政策允許使用者執行 Secrets Manager 操作,但僅限請求是透過 VPC 端點
提出的情況。若要使用此政策,請參閱 將許可政策連接至 AWS Secrets Manager
秘密。vpce-1234a5678b9012c
{ "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
時,才允許存取秘密加密值的操作。如果您在某個 VPC 中執行應用程式,但您使用第二個隔離的 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
" } } } ] }
範例:使用標籤控制對秘密的存取
您可以使用標籤來控制對秘密的存取。使用標籤控制許可,在成長快速的環境中相當有幫助,也能在政策管理變得繁瑣時提供協助。其中一種策略是將標籤連接至秘密,然後在秘密具有特定標籤時將許可授予身分。
範例 允許使用特定標籤存取秘密 (連接至身分)
下列原則允許針DescribeSecret
對具有金鑰 "" 和值為 ServerName
"ServerABC
" 之標籤的密碼。若要使用此政策,請參閱 將許可政策連接至身分。
{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "secretsmanager:DescribeSecret", "Resource": "*", "Condition": { "StringEquals": { "secretsmanager:ResourceTag/
ServerName
": "ServerABC
" } } } }
範例:使用符合秘密標籤的標籤限制對身分的存取
其中一種策略是將標籤同時連接至秘密和 IAM 身分。然後您可以建立許可政策,從而在身分的標籤與秘密的標籤相符時允許操作。如需完整的教學課程,請參閱根據標籤定義秘密的存取許可。
使用標籤控制許可,在成長快速的環境中相當有幫助,也能在政策管理變得繁瑣時提供協助。如需詳細資訊,請參閱 AWS的 ABAC 是什麼?
範例 允許存取與秘密具有相同標籤的角色 (連接至秘密)
下列政策僅在標籤
的秘密和角色值相同時,才會向帳戶 AccessProject
授予 123456789012
GetSecretValue
。若要使用此政策,請參閱 將許可政策連接至 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 需求》。
服務主體通常不會用作附加至密碼之原則中的主參與者,但有些 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
" } } } ] }